python - 为什么 python 中的列表会这样?

标签 python list immutability

如果我有如下函数和代码:

def do_something(a, b):
    a.insert(0, ’z’)
    b = [’z’] + b
a = [’a’, ’b’, ’c’]
a1 = a
a2 = a[:]
b = [’a’, ’b’, ’c’]
b1 = b
b2 = b[:]
do_something(a, b)

为什么 print(a) 产生 ['z','a','b','c'],但打印 b 仍然只打印 ['a','b','c']

在我制作的函数中 b = b + ['z'] 所以 z 不应该也在列表中吗?

还有为什么打印 a[:] 不打印新列表 ['z','a','b','c'] 并打印旧列表 ['a','b','c'] 代替?

最佳答案

因为在 do_something 中,您正在修改标签为 a 的列表,但您正在创建一个新列表并将其重新分配给标签 b ,不修改带有标签 b

的列表

这意味着 do_something 之外的 a 列表已更改,但 b 没有更改,因为您只是巧合地使用了func 中的相同名称,您也可以使用不同名称的 func 做同样的事情,例如:

def do_something(x, y):
    x.insert(0, ’z’)
    y = [’z’] + y

并且您在外部的打印品仍会像您报告的那样运行,因为函数内部和外部对象的标签不相关,在您的示例中它们恰好是相同的。

关于python - 为什么 python 中的列表会这样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34246772/

相关文章:

python - 如何从另一个程序向 celery 添加任务?

python - 二叉搜索树 cumsum

c# - 当 T 是结构时,List<T>.Find 如何工作?

Python Pandas groupby 多个计数

java - 添加到空列表

python - 折叠列表列表以生成列表

concurrency - 为什么 ReadOnlyDictionary 不是线程安全的?

javascript - 如何从 ImmutableJS 中对象内部的数组中删除元素

variables - 如果我们有不可变变量,为什么我们在 Rust 中需要常量?

python - for循环在while循环中