python中的所有对象都是对象,除非明确要求这样做,否则python永远不会复制。
当你做
innerList = [0] * 10
您将创建一个包含10个元素的列表, 所有int
0
元素 都引用同一个 对象 。
由于整数对象是 不可变的 ,因此当您执行
innerList[1] = 15
您正在更改列表的第二个元素,使其引用另一个整数 15
。由于 int
对象的不变性,这总是可行的。
这就是为什么
outerList = innerList * 5
将创建一个
list包含5个元素的对象,每个元素都与上面 相同
innerList。但是由于
list对象是 可变的 :
outerList[2].append('something')是相同的:
innerList.append('something')因为它们是对
同一list
对象的两个引用。因此,该元素以该single结尾
list。它似乎是重复的,但事实是只有一个
list对象,并且有许多引用。
相反,如果您这样做
outerList[1] = outerList[1] + ['something']
在这里,您将 创建 另一个 list
对象(
+与列表一起使用是一个显式副本),并将对该 对象
的引用分配到的第二个位置
outerList。如果以这种方式“添加”元素(不是真正地添加,而是创建另一个列表),
innerList则不会受到影响。



