提问人:handsome donkey 提问时间:7/16/2022 最后编辑:martineauhandsome donkey 更新时间:7/16/2022 访问量:47
为什么我不能在函数中重新分配列表(作为参数传递)?[复制]
Why can't I reassign a list (passed as a paramater) in a function? [duplicate]
问:
根据我的理解,这两个函数都应该改变,因为列表是可变的,但只有 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)
答:
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))
评论
myList
是对象的名称。它仅存在于函数的范围内。您更改的是名称,而不是列表。bar
foo
就地更改列表,创建一个新列表。bar