<分区> 分区>
我想让我的代码更有(内存)效率。现在我们有很多函数将可迭代对象作为参数,例如:
def foo(para,meter,iterable):
#...
pass
有时我们必须为它提供一个空列表才能正常工作:foo(14,25,[])。问题是每次构造一个新列表时:需要在堆上分配,一个列表似乎有64字节内存(在我自己的机器上,用sys.getsizeof([])测试) 而只有空元组 需要(可能一次)48 个字节。
因此我想知道空元组是否是常量。由于元组是不可变的,因此可以很容易地使长度为 0 的元组(因此 ())成为程序中的常量。这将减少“构建时间”(实际上没有构建时间,因为它只会设置对常量的引用)并减少分配的内存量。
我的问题是,关于 Python 解释器(即任何流行的解释器)是否可以保证空元组确实是一个常量,因此 () 不需要构建时间,也不需要分配额外的内存。
用id(..) 测试似乎支持了确实只有一个零元组的理论:
>>> id(())
140290183798856
>>> a = ()
>>> id(a)
140290183798856
但有可能在运行时 Python 解释器出于某种原因 fork 元组。
