gpt4 book ai didi

python - 为什么相同值的内存地址不同

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

考虑下面的代码

a,b="hello","hello" 
print id(a),id(b)

输出

28954752 28954752

对于字符、字符串等,输出将相同但现在考虑一个列表

list1=[1,2,3,4]
list2=[1,2,3,4]
print id(list1),id(list2)

输出

139706054367136 139706054368360

我们可以看到在列表/元组/字典的情况下给出的地址是不同的, 如果它们是引用变量那么为什么字符串为相同的值提供相同的地址?

最佳答案

有时(根据设计,这是一个实现细节)Python caches certain values 供重用。

特别是它只能安全​​地缓存字符串和整数等不可变类型。由于 list1list2 是可变的,因此它们在内部引用同一对象会出现问题,因为其中一个对象的突变会反射(reflect)在另一个对象中。

假设 Python 有某种列表缓存,这样 list1list2 最终引用同一个对象:

> print(id(list1) == id(list2))
True
> list1[0] = 5
> print(list2)
[5, 2, 3, 4]

这是一件好事,但它不是这样工作的——使用起来会很麻烦!

关于python - 为什么相同值的内存地址不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38909952/

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