如果我有如下函数和代码:
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/