gpt4 book ai didi

带有列表的 Python 实例行为

转载 作者:太空狗 更新时间:2023-10-30 01:18:57 26 4
gpt4 key购买 nike

考虑 Python 中的以下实例行为。

def change(elements):
elements[0] = 888
elements = [-3, -1, -2, -3, -4]
print(elements[0])

numbers = [1, 4, 5]

print(numbers[0])
change(numbers)
print(numbers[0])
print(numbers)

下面的 Python 片段打印

1
-3,
888
[888,4,5]

它不应该打印

1, 
-3,
-3,
[-3,-1,-2,-3,-4]

为什么成功覆盖列表中的一个元素,而不是整个列表对象?

最佳答案

列表作为函数的引用传递。所以列表在全局空间和函数之间共享。第一个更改修改了列表,并且该更改反射(reflect)在两个空间中。但是然后你做并赋值给列表变量。这会在函数中创建一个新列表。原始列表存在于全局空间中,但它不再存在于函数中。因此,从那时起对函数中的列表所做的所有更改仅在函数内可见。

考虑此实例的另一种方式是列表是一种容器。该函数的第一行更改容器中的内容。第二行(赋值)实际上改变了你正在使用的容器。这适用于列表,也适用于任何对象。这就是@Chris_Rands 在评论中给出的解决方案有效的原因:它修改容器中的内容,但不更改容器。

关于带有列表的 Python 实例行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51325767/

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