在第一个示例中,由于 interning
,名称
a和
b都“引用”同一对象。赋值语句产生一个具有相同整数的整数,这仅是因为该赋值语句重用了一个已经存在于内存中的预先存在的对象。这不是整数的可靠行为:
__
id
>>> a = 257>>> b = 257>>> id(a), id(b)(30610608, 30610728)
如上所示,如果选择足够大的整数,则其行为将与第二个示例中的浮点数相同。而且,在Python语言中,小整数的插入始终是 可选
的,这恰好是CPython实现的细节:这是一种性能优化,旨在避免创建新对象的开销。我们可以通过缓存常用的整数实例来加快处理速度,但代价是Python解释器的内存占用量更大。
在处理Python时,请不要考虑“引用”和“值”,适用于C的模型在这里并不能很好地工作。而是考虑“名称”和“对象”。
上图说明了您的第三个示例。
2是一个对象,
a并且
b是名称。我们可以使用不同的名称指向同一对象。对象可以不带任何名称存在。
分配 变量仅 附加一个名称标签 。和 删除 一个变量只 删除名签
。如果您牢记这个主意,那么Python对象模型将再也不会令您感到惊讶。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)