2016-03-01 98 views
0

我想插入一個新的項目在我的列表中。但是,因爲我想保持我的原始列表完好無損,我將我的原始列表等同於另一個字符串字母。但是,當我對「s」列表感到不安時,即使沒有執行這樣的操作,這個新元素也會插入到所有列表中!python:list.insert:在一個給定的位置插入一個項目

爲什麼?我錯過了一些東西:(Pycharm與Python 2.3)。

l_max=[1,2,3] 
a=l_max 
b=a 
c=b 
s=c 
s.insert(0, 0) 
+0

謝謝你通知我關於這些帖子,而我沒有搜索。可能我沒有使用正確的搜索詞作爲新手!我沒有使用「更新」或「迭代」等詞語。這兩個帖子使用這些詞:) –

回答

1

而不是到另一個列表b = a分配列表,你想將它設置爲副本:b = a[:]

l_max=[1,2,3] 
a=l_max # a points to l_max 
b=a  # b points to a 
c=b  # so on 
s=c  # so forth 
s.insert(0, 0) # insert into the only list, which all variable point to 

你想:

l_max=[1,2,3] 
a=l_max[:] # create copy 
b=a[:] 
c=b[:] 
s=c[:] 
s.insert(0, 0) # insert only into s 
+0

我解決了這個問題......但爲什麼它被遞歸插入到所有其他列表中,即使這不是明確的聲明? –

+1

你最初做的方式不是創建新的列表,只是對第一個列表的新引用。只有一個列表('l_max'),所有後續列表將引用內存中的同一個地方,第一個列表是。因此,插入任何這些引用將插入到唯一的列表中。通過使用'[:]',你可以在內存中創建一個新的列表副本,然後插入到其中,而不會影響其他列表。總之:你的方式只有一個列表,'[:]'創建副本。你可以閱讀更多關於C中的指針來了解它是如何工作的。 – Will

+1

http://stackoverflow.com/questions/2612802/how-to-clone-or-copy-a-list-in-python?lq=1這是一個很好的參考資料,在python中這個問題,這是一個很好的參考爲指針和參考:http://www.cplusplus.com/doc/tutorial/pointers/ – Will

相關問題