我在以下函数的参数中使用了一个列表:
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应该可以帮助我避免我遇到的问题。
编辑:我删除了“怪异”方法,但仍然遇到问题。
答案 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]
>>>