【发布时间】:2016-12-18 23:52:43
【问题描述】:
考虑下面的代码
a,b="hello","hello"
print id(a),id(b)
输出
28954752 28954752
char、string 等的输出将相同 但是现在考虑一个列表
list1=[1,2,3,4]
list2=[1,2,3,4]
print id(list1),id(list2)
输出
139706054367136 139706054368360
我们可以看到在列表/元组/字典的情况下给出的地址是不同的,如果它们是引用变量,那么为什么字符串为相同的值给出相同的地址?
【问题讨论】:
-
哪种行为让您感到惊讶?整数具有相同 ID 的事实,还是列表不具有相同 ID 的事实?
-
该问题仅针对我询问列表/元组的字符串。
-
@julienbernu 我对这个答案不满意。
-
如果您打算做任何基于对象 ID 或数据的内存地址的事情,您可能不应该这样做。不同的 Python 解释器(CPython vs. PyPy vs. ActivePython vs. ...)会以不同的方式处理这样的内部细节......我怀疑即使是相同的 Python“品牌”在不同的架构上也会表现不同。
-
@KevinJ.Chase:理论上,参考解释器能够根据编译选项禁用多个缓存,因此即使在相同的架构上,自定义构建的行为也可能不同。
标签: python