Python内存的一些有趣的问题

2019-09-29  本文已影响0人  10xjzheng

1.特权种族:共用内存的对象

>>> b=256
>>> a=256
>>> id(a)==id(b)
True
>>> a=257
>>> b=257
>>> id(a)==id(b)
False
>>> s="python_cat"
>>> t="python_cat"
>>> id(s)==id(t)
True

2.常见数据类型的内存大小

import sys
sys.getsizeof("")      # 49
sys.getsizeof([])      # 64
sys.getsizeof(())      # 48
sys.getsizeof(set())   # 224
sys.getsizeof(dict())  # 240

# 作为参照:
sys.getsizeof(1)       # 28
sys.getsizeof(True)    # 28

排一下序:基础数字<空元组 < 空字符串 < 空列表 < 空集合 < 空字典。
因为这些空对象都是容器,我们可以抽象地理解:它们的一部分内存用于创建容器的骨架、记录容器的信息(如引用计数、使用量信息等等)、还有一部分内存则是预分配的。

空对象并不为空,一部分原因是 Python 解释器为它们预分配了一些初始空间。在不超出初始内存的情况下,每次新增元素,就使用已有内存,因而避免了再去申请新的内存。

可变对象在扩充时的秘密:

消减元素并不会释放内存。

引用自:https://mp.weixin.qq.com/s?__biz=MzUyOTk2MTcwNg==&mid=2247484562&idx=1&sn=62bdb35df55000f982d34b82ac7d62c1&scene=21#wechat_redirect

上一篇下一篇

猜你喜欢

热点阅读