python:list.insert:在一个给定的位置插入一个项目

问题描述:

我想插入一个新的项目在我的列表中。但是,因为我想保持我的原始列表完好无损,我将我的原始列表等同于另一个字符串字母。但是,当我对“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

谢谢你通知我关于这些帖子,而我没有搜索。可能我没有使用正确的搜索词作为新手!我没有使用“更新”或“迭代”等词语。这两个帖子使用这些词:) –

而不是到另一个列表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://*.com/questions/2612802/how-to-clone-or-copy-a-list-in-python?lq=1这是一个很好的参考资料,在python中这个问题,这是一个很好的参考为指针和参考:http://www.cplusplus.com/doc/tutorial/pointers/ – Will