gpt4 book ai didi

python - 不可变类型的 ID

转载 作者:太空宇宙 更新时间:2023-11-03 12:51:45 25 4
gpt4 key购买 nike

我对可变对象和不可变对象(immutable对象)之间的区别有点困惑。我尝试了以下代码块来查找对象的 ID:

tuple1 = ('Object1', 'Object2')
print id(tuple1)
tuple2 = ('Object1', 'Object2')
print id(tuple2)
list1 = ['Object1', 'Object2']
print id(list1)
list2 = ['Object1', 'Object2']
print id(list2)
string1 = "Foo bar"
print id(string1)
string2 = "Foo bar"
print id(string2)

我为字符串获得了相同的 ID,为列表获得了不同的 ID,但为元组获得了不同的 ID。他们不应该有相同的ID吗?我想知道是否有人可以解释它是如何工作的?

谢谢

最佳答案

相同的 ID 意味着完全相同的对象,但是 Python 的实现可以随意优化不可变对象(immutable对象)的创建。例如,在 CPython 2.6.6 中缓存了小整数对象,因此:

>>> x=256
>>> x is 256
True
>>> x=1024
>>> x is 1024
False

[NOTE: 'is' tests for object identity (same ID)]

不保证此结果在其他实现中会相同。实现可以缓存不可变元组,但哪些元组是常见的?如果你建议所有相同的元组返回相同的 id,那么程序创建的所有元组都必须被缓存,并且每个新创建的元组都必须搜索缓存以查看它之前是否已创建,这将是耗时。

使用 == 来测试对象是否相等,而不考虑 ID。

关于python - 不可变类型的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4293408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com