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)
而不是到另一个列表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
谢谢你通知我关于这些帖子,而我没有搜索。可能我没有使用正确的搜索词作为新手!我没有使用“更新”或“迭代”等词语。这两个帖子使用这些词:) –