在Python中覆盖列表

-2 投票
3 回答
10406 浏览
提问于 2025-04-17 19:19

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

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[:]

撰写回答