我认为如果你将一个变量分配给另一个列表,它就不会复制,而是指向同一个位置。这就是deepcopy()的用途。 Python 2.7不是这样:它被复制了。
>>> a=[1,2,3]
>>> b=a
>>> b=b[1:]+b[:1]
>>> b
[2, 3, 1]
>>> a
[1, 2, 3]
>>>
>>> a=(1,2,3)
>>> b=a
>>> b=b[1:]+b[:1]
>>> a
(1, 2, 3)
>>> b
(2, 3, 1)
>>>
我错过了什么?
答案 0 :(得分:3)
此行更改b
指向的内容:
b=b[1:]+b[:1]
列表或元组添加创建一个新列表或元组,赋值运算符使b
引用该新列表,同时让a
引用原始列表或元组。
切片列表或元组也会创建一个新对象,以便该行创建三个新对象 - 每个切片一个,然后一个用于总和。 b = a + b
将是一个更简单的示例,用于演示添加是否会创建新对象。
您有时会看到c = b[:]
作为浅层复制列表的方法,利用切片创建新对象的事实。
答案 1 :(得分:0)
执行b=b[1:]+b[:1]
时,首先创建两个b
切片的新对象,然后指定b引用该对象。同样适用于list
和tuple
个案例