【问题标题】:Why can't I reassign a python list (passed as a paramater) in a function? [duplicate]为什么我不能在函数中分配 python 列表(作为参数传递)? [复制]
【发布时间】:2022-07-16 00:07:30
【问题描述】:

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

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)

【问题讨论】:

  • myList 是对象的名称。它只存在于函数的范围内。在bar 中,您正在更改名称,而不是列表。
  • foo 就地更改列表,bar 创建一个新列表。
  • 在此处查看此操作 - pythontutor.com 你会得到它。

标签: python list variables mutable


【解决方案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))

【讨论】:

    【解决方案2】:

    列表变量表示对特定可变列表对象的引用,但是,它不是列表对象

    在函数foo中,你是通过列表引用访问列表对象,所以内存中的列表对象发生了变化。

    在函数栏中,您只是将一个新的列表对象分配给函数范围内的引用,而外部范围内的“列表”引用不会改变。

    【讨论】:

      猜你喜欢
      • 2020-07-16
      • 2011-10-27
      • 2021-07-18
      • 2021-10-10
      • 2012-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多