我想插入一個新的項目在我的列表中。但是,因爲我想保持我的原始列表完好無損,我將我的原始列表等同於另一個字符串字母。但是,當我對「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)
我想插入一個新的項目在我的列表中。但是,因爲我想保持我的原始列表完好無損,我將我的原始列表等同於另一個字符串字母。但是,當我對「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)
而不是到另一個列表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
我解決了這個問題......但爲什麼它被遞歸插入到所有其他列表中,即使這不是明確的聲明? –
你最初做的方式不是創建新的列表,只是對第一個列表的新引用。只有一個列表('l_max'),所有後續列表將引用內存中的同一個地方,第一個列表是。因此,插入任何這些引用將插入到唯一的列表中。通過使用'[:]',你可以在內存中創建一個新的列表副本,然後插入到其中,而不會影響其他列表。總之:你的方式只有一個列表,'[:]'創建副本。你可以閱讀更多關於C中的指針來了解它是如何工作的。 – Will
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
謝謝你通知我關於這些帖子,而我沒有搜索。可能我沒有使用正確的搜索詞作爲新手!我沒有使用「更新」或「迭代」等詞語。這兩個帖子使用這些詞:) –