为什么python中的列表以这种方式运行?

Ran*_*123 1 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)
Run Code Online (Sandbox Code Playgroud)

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

在我所做的功能中b = b + ['z']也不z应该在列表中?

另外为什么打印a[:]不打印新列表['z','a','b','c']并打印旧列表['a','b','c']呢?

Eri*_*ouf 5

因为do_something您正在修改具有标签的列表,a但您正在创建新列表并将其重新分配给标签b,而不是使用标签修改列表b

这意味着名单之外do_somethinga已被更改,但不是b一个,因为你只是巧合使用FUNC内相同的名字,你也可以做喜欢用不同的名称FUNC同样的事情:

def do_something(x, y):
    x.insert(0, ’z’)
    y = [’z’] + y
Run Code Online (Sandbox Code Playgroud)

并且你在外面的打印仍然会像报告一样,因为函数内部和外部的对象的标签不相关,在你的例子中它们恰好相同.