我最近阅读了此链接here 这引起了一个问题。作者只说了这个
x = 23
y = x
那呢
x = 23
y = 23
x和y都引用一个值23仍然正确吗?第一个“ 23”与第二个“ 23”相同吗?如果那是为什么我尝试这个
a=[1,2,3]
b=[1,2,3]
b.reverse()
print(a)
结果是
[1, 2, 3]
那是为什么?因为a和b都引用值[1,2,3],而list是可变类型。正如作者所说 “如果两个名称引用相同的值,并且该值被突变,那么两个名称都将看到更改。”在我的代码中,b更改了,为什么a没有
答案 0 :(得分:1)
两次创建一个全新的list
不会造成混叠情况。从头开始创建两次 any 可变类型将不会导致别名。您的a
和b
具有相同的内容,但是它们是两个完全不同的list
。
CPython参考解释器 有时会缓存小型/简单的不可变类型(小型int
,空tuple
和{{1} }等),因此您会发现初始化为str
的所有内容都初始化为 same 23
,但这是一个实现细节,在实践中很少涉及。基本上,只要您不从已经存在的对象中分配一个名称(并且不要做一些棘手的事情,例如序列乘法或可变的默认参数),任何别名都不会发生危险的感觉。