[英]List of Objects being Changed when Original Object is Changed
在Python中,如果我写:
a = [1]
b = 3 * [a]
a.append(2)
print a, b
然后,输出是:
[1, 2] [[1, 2], [1, 2], [1, 2]]
但是,当我写:
a = [1]
b = 3 * a # notice the missing brackets here
a.append(2)
print a, b
原来是:
[1, 2] [1, 1, 1]
这里发生了什么?
在第一个例子中,想一想Python对这个语句的作用:
b = 3 * [a]
它成为了:
b = [[a], [a], [a]]
因此,改变a
将反映在b
,因为b
a
对象构成。
但是,在第二个示例中,您执行此操作:
b = 3 * a
这会创建列表a
的副本,相当于:
b = [1, 1, 1]
因此,附加到当a
这个时候,没有什么改变。
这是因为当你执行b = 3 * [a]
,对变量a
的引用不会丢失。 因此,a中所做的任何更改都将在b中复制。
但是,当您运行b = 3 * a
新的list
被创建的实例,其中有没有提到a
列表了。
Python中的所有数据结构都是对象,变量指向它们。 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.