调试一段代码时遇到了这个问题。如果以前没有意识到这种行为。
foo = bar = [1, 2, 3]
hex(id(foo))
Out[121]: '0x1f315dafe48'
hex(id(bar))
Out[122]: '0x1f315dafe48'
两个“变量”都指向同一个内存位置。但是现在如果一个改变了,另一个也改变了:
foo.append(4)
bar
Out[126]: [1, 2, 3, 4]
所以基本上在这里我们有两个名称分配给同一个变量/内存地址。这不同于:
foo = [1, 2, 3]
bar = [1, 2 ,3]
hex(id(foo))
Out[129]: '0x1f315198448'
hex(id(bar))
Out[130]: '0x1f319567dc8'
在这里更改其中一个foo
或bar
不会对另一个产生任何影响。
所以我的问题是:为什么这个特性(可变类型的链式赋值)甚至存在于 Python 中?除了给你工具让你在脚上开枪之外,它还有其他用途吗?