为什么我不能在函数中重新分配列表(作为参数传递)?[复制]

Why can't I reassign a list (passed as a paramater) in a function? [duplicate]

提问人:handsome donkey 提问时间:7/16/2022 最后编辑:martineauhandsome donkey 更新时间:7/16/2022 访问量:47

问:

根据我的理解,这两个函数都应该改变,因为列表是可变的,但只有 foo() 这样做了。list

def foo(myList):
  myList[0] = 3
  
def bar(myList):
  myList = [3,2,1]

list = [1,2,3]
print(list)

foo(list)
print(list)

bar(list)
print(list)
列表 变量 可变

评论

1赞 Peter Wood 7/16/2022
myList是对象的名称。它仅存在于函数的范围内。您更改的是名称,而不是列表。bar
2赞 DjaouadNM 7/16/2022
foo就地更改列表,创建一个新列表。bar

答:

3赞 Waket Zheng 7/16/2022 #1

打印 ID 可能有助于您理解它:

def foo(myList):
  myList[0] = 3
  print(id(myList))
  
def bar(myList):
  myList = [3,2,1]
  print(id(myList))

list = [1,2,3]
print(list)
print(id(list))

foo(list)
print(list)
print(id(list))

bar(list)
print(list)
print(id(list))