Python:那些变量不指向相同的值。为什么?

时间:2015-10-01 23:14:33

标签: python

我认为如果你将一个变量分配给另一个列表,它就不会复制,而是指向同一个位置。这就是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)
>>>

我错过了什么?

2 个答案:

答案 0 :(得分:3)

此行更改b指向的内容:

b=b[1:]+b[:1]

列表或元组添加创建一个新列表或元组,赋值运算符使b引用该新列表,同时让a引用原始列表或元组。

切片列表或元组也会创建一个新对象,以便该行创建三个新对象 - 每个切片一个,然后一个用于总和。 b = a + b将是一个更简单的示例,用于演示添加是否会创建新对象。

您有时会看到c = b[:]作为浅层复制列表的方法,利用切片创建新对象的事实。

答案 1 :(得分:0)

执行b=b[1:]+b[:1]时,首先创建两个b切片的新对象,然后指定b引用该对象。同样适用于listtuple个案例