一个更简单的指标是检查等效的大小tuple
and namedtuple
对象。给定两个大致相似的对象:
from collections import namedtuple
import sys
point = namedtuple('point', 'x y z')
point1 = point(1, 2, 3)
point2 = (1, 2, 3)
获取它们在内存中的大小:
>>> sys.getsizeof(point1)
72
>>> sys.getsizeof(point2)
72
他们在我看来是一样的...
进一步复制您的结果,请注意,如果您按照您的方式创建相同元组的列表,则每个tuple
是完全相同的对象:
>>> test_list = [(1,2,3) for _ in range(10000000)]
>>> test_list[0] is test_list[-1]
True
因此,在元组列表中,每个索引都包含一个引用same目的。不存在 10000000 个元组,而是对一个元组有 10000000 次引用。
另一方面,你的清单namedtuple
实际上是物体does创建 10000000 个独特的对象。
更好的同类比较是查看内存使用情况
>>> test_list = [(i, i+1, i+2) for i in range(10000000)]
and:
>>> test_list_n = [point(x=i, y=i+1, z=i+2) for i in range(10000000)]
它们具有相同的尺寸:
>>> sys.getsizeof(test_list)
81528056
>>> sys.getsizeof(test_list_n)
81528056