Koe*_*uck 5 python list python-3.x
考虑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)
Run Code Online (Sandbox Code Playgroud)
下面的Python代码段打印出来
1
-3,
888
[888,4,5]
Run Code Online (Sandbox Code Playgroud)
不应该打印
1,
-3,
-3,
[-3,-1,-2,-3,-4]
Run Code Online (Sandbox Code Playgroud)
为什么列表中的元素会被成功覆盖,而不是整个列表对象?
该列表作为函数的引用传递。因此该列表在全局空间和函数之间共享。第一个更改会修改列表,并且该更改会反映在两个空间中。但随后您会执行并分配给列表变量。这会在函数中创建一个新列表。原始列表存在于全局空间中,但它不再存在于函数中。因此,从那时起对函数中列表所做的所有更改仅在函数内可见。
考虑此实例的另一种方式是列表是一种容器。该函数的第一行更改容器中的内容。第二行(分配)实际上更改了您正在使用的容器。这不仅适用于列表,也适用于任何对象。这就是@Chris_Rands 在评论中给出的解决方案起作用的原因:它修改容器中的内容,但不会更改容器。
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |