如果我有以下功能和代码:
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执行相同的操作,例如:外部的打印仍然会像您报告的那样工作,因为函数内部和外部对象的标签是不相关的,在您的示例中,它们恰好是相同的。你知道吗
从https://docs.python.org/2/library/copy.html
好的
尽管上面说的是真的,但是你所想到的带有z的b与在程序的“结尾”处打印的b是不同的。但是,打印在第一行的b是函数def\u something()中的b。你知道吗
代码:
输出:
有关LEGB的详细信息。你知道吗
相关问题 更多 >
编程相关推荐