2013-05-26 53 views
1

我需要一點點幫助理解這個代碼:如何讓x = y在價值而不是記憶方面?

x = [1,2,3] 
y = [4,5,6] 
x = y 
print x 
print y 
y.remove(4) 
print x 
print y 

當我從列表中刪除[4,5,6]4,無論是xy變量將指向同一個[5,6]列表內存是嗎?
如果是這樣,那麼我怎樣才能讓x等於y列表的副本,以便xy都指向內存中的不同位置,但這些位置都保持相同的值? (如內存不是讓它們指向同一個地方如上所示)

回答

9

特別是對於列表,您可以通過對整個列表進行淺層複製:

x = y[:] 

這不保證能夠正常工作[R arbitary可切片的對象(例如,numpy的陣列片不創建一個新的數組),所以可以使用內置copy模塊有用:

import copy 
x = copy.copy(y) 

可望爲arbitary y工作。

7

只是克隆名單:

x = list(y) 
+0

可以說這是最易讀的方法,並且也適用於'dict'和'set' – jamylak

1

製作副本:

>>> x = [1,2,3] 
>>> y = [4,5,6] 
>>> x = y[:] 
>>> y.remove(4) 
>>> y 
[5, 6] 
>>> x 
[4, 5, 6] 
0
x = [1,2,3] 
y = [4,5,6] 
x = y[:] 
print x 
print y 
y.remove(4) 
print x 
print y 

所以[:]製作一個列表的副本。

相關問題