覆盖python中的列表

时间:2013-03-16 15:25:29

标签: python list overwrite

我在以下函数的参数中使用了一个列表:

def myFunct(myList):
  print(myList) # display [0,1]
  myModifiedList = list(myList)
  myModifiedList[0]=-1
  print(myList) # display [-1,1]
  return myModifiedList

当然,我想在我的函数myList的第二次打印中显示[0,1]。 我不知道这里有什么问题,我知道python中的所有内容都是通过引用来实现的。但是,我的函数array_copy应该可以帮助我避免我遇到的问题。

编辑:我删除了“怪异”方法,但仍然遇到问题。

3 个答案:

答案 0 :(得分:3)

首先,您的代码打印[0, 1]两次,而不是[0, 1]后跟[-1, 1]。这并不是说它完美无瑕。

一个错误在于:

for i in array:
   copy.append(array[i])

i遍历列表元素,而不是 indices 。因此,array[i]应为i

实际上,整个array_copy()函数是不必要的。你可以替换:

myModifiedList = array_copy(myList)

myModifiedList = myList[:]

制作列表的(浅)副本。

答案 1 :(得分:1)

我无法使用复制列表的合理方法重现此行为:

>>> mylist = [0, 1]
>>> modified = list(mylist)
>>> modified[0] = -1
>>> print(mylist)
[0, 1]

您是否真的运行了问题中的代码?正如NPE指出的那样,你的复制功能本质上是有缺陷的。与往常一样,最好的答案是不要重新发明轮子,并使用内置的方法来做到这一点。

答案 2 :(得分:0)

>>> a=[0,1]
>>> print a
[0, 1]
>>> b=a
>>> b[0]=-1
>>> print a
[-1, 1]
>>> c=list(a)
>>> c[0]=3
>>> print a
[-1, 1]
>>> print c
[3, 1]
>>> print b
[-1, 1]
>>>