b = [0]
def copyalist(b):
b = [1, 2, 3]
print(b)
copyalist(b)
print(b)
输出如下:
[1, 2, 3]
[0]
第一行表示在函数中,b设置为[1、2、3]; 但是,当您从函数中打印(b)时,第二个输出显示b仍为[0]。
我不明白,为什么外层b不变?
我还尝试了b = copy.deepcopy([1、2、3]),输出是相同的。
但是,以下代码可以正常工作:
b = [0]
def copyalist(b):
b += [1, 2, 3]
print(b)
copyalist(b)
print(b)
输出如下:
[0, 1, 2, 3]
[0, 1, 2, 3]
答案 0 :(得分:0)
在python中,列表仅通过引用作为函数参数传递,即,仅给出第一个元素的内存地址。在函数内部定义新的b
时,只需更改内部变量b
所指向的内存位置,但外部b
仍指向原始位置。反之亦然,当您执行b += [1, 2, 3]
时,您将更改内部b
所引用的单元格内的内容,并且由于内部b
和外部b
指向相同的单元格,因此它反映了更改XMLHttpRequest()
的外部。
答案 1 :(得分:0)
b = copyalist(b)
并在函数中返回b
def copyalist(b):
b = [1, 2, 3]
return(b)
在函数中定义某些内容时,只能在该函数内部使用。
答案 2 :(得分:0)
此代码:
def copyalist(b):
b = [1, 2, 3]
print(b)
仅意味着将变量名b
重映射到新列表,而不修改原始的b
。如果要修改原始列表,则必须明确告诉Python替换实际内容。方法是:
def copyalist(b):
b[:] = [1, 2, 3]
print(b)
答案 3 :(得分:0)
这是由于全局变量和局部变量不同。您可以将global添加到函数中以获得所需的结果。
b = [0]
def copyalist():
global b
b = [1, 2, 3]
print(b)
copyalist()
print(b)
输出
[1, 2, 3]
[1, 2, 3]
更深入的总结是here