gpt4 book ai didi

Python .pop() 全局更改本地列表?

转载 作者:行者123 更新时间:2023-12-01 02:09:28 25 4
gpt4 key购买 nike

我在代码中遇到错误,搜索后发现 .pop() 函数在全局级别上更改了本地函数中的列表值,而没有使用 return 函数或全局语句。我明白 pop 的作用,我以前用过它,但我不明白为什么它会影响全局列表的值。这是为什么?这个有名字吗?还有其他函数可以做同样的事情吗?

#Example code
listname=[1,2,3,4,5]

def checkpop(listname):
popped = listname.pop()
listname = ['WTF']
print (listname)

print(listname)
checkpop(listname)
print(listname)

输出

[1,2,3,4,5]

['WTF']

[1,2,3,4]

最佳答案

因为赋值不会为 Python 中的任何对象创建任何新副本。因此,当您将全局列表作为参数传递给函数时,您将绑定(bind)到函数内的同一个列表对象。

由于列表在 Python 中是可变的,因此当您在其中执行就地操作时,您正在更改相同的全局列表对象。

为了更好地掌握,您可以随时检查id:

In [45]: lst = [1, 2]

In [46]: def foo(lst):
...: print(id(lst))
...: return

In [47]: id(lst)
Out[47]: 139934470146568

In [48]: foo(lst)
139934470146568

关于Python .pop() 全局更改本地列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48794882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com