2015-10-01 87 views
2

我認爲,如果您將變量分配給另一個列表,它不會被複制,但它指向相同的位置。這就是爲什麼deepcopy()的原因。對於Python 2.7來說這不是真的:它被複制了。Python:那些變量不指向相同的值。爲什麼?

>>> 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

什麼看起來不正確? –

+0

您錯過了變量是名稱的事實。該賦值使名稱「b」指向由表達式 – Pynchia

回答

3

此行改變了什麼b點:

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

列表或元組另外創建一個新的列表或元組,並賦值運算符使b指的是新的列表同時保留a引用原始列表或元組。

切分列表或元組也會創建一個新對象,以便該行創建三個新對象 - 每個切片一個,然後一個用於總和。 b = a + b將是一個更簡單的例子來證明添加創建一個新的對象。

有時您會看到c = b[:]作爲淺拷貝列表的方式,利用切片創建新對象的事實。

+1

產生的新創建對象即使沒有添加,切片也會生成一個新對象 – Pynchia

0

當你做b=b[1:]+b[:1]你首先創建兩個b切片的新對象,然後分配b引用該對象。這同樣適用於這兩種listtuple案件

相關問題