在Python中覆盖列表
我在下面这个函数的参数中使用了一个列表:
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
>>> 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]
>>>
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言进行解释。
2
我无法用正常的方式复制这个列表来重现这个行为:
>>> mylist = [0, 1]
>>> modified = list(mylist)
>>> modified[0] = -1
>>> print(mylist)
[0, 1]
你真的运行过你在问题中写的代码吗?正如NPE所指出的,你的复制函数本身就有问题。最好的办法就是不要重复造轮子,直接使用内置的方法来完成这个操作。
3
首先,你的代码打印出了 [0, 1]
两次,而不是先打印 [0, 1]
然后打印 [-1, 1]
。这并不是说它没有问题。
其中一个错误是:
for i in array:
copy.append(array[i])
i
是在遍历列表中的元素,而不是索引。所以,array[i]
应该直接用 i
。
实际上,整个 array_copy()
函数都是多余的。你可以用下面的代码替代:
myModifiedList = array_copy(myList)
这样就可以创建一个(浅)拷贝的列表。
myModifiedList = myList[:]