如果我有以下功能和代码:
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
并且你在外面的打印仍然会像报告一样,因为函数内部和外部的对象的标签不相关,在你的例子中它们恰好相同.