列表作为参数传入一个函数,函数对列表的修改,会直接改变该列表的值。而变量则不会,只在函数里改变,不会影响原来的值。
也就是列表和变量传入函数时,会有不同的结果。
当传入变量时,经过函数x( ),不会改变最开始定义的a的值。
def x(a):
a=1111111111
print(a)
a=1
x(a)
print(a)
输出:1111111111
1
当传入列表时,在函数里对列表的操作,会让原先的列表改变。
a=[1,2,3]
def x(a):
a[1]=10000
print(a)
x(a)
print(a)
输出:[1, 10000, 3]
[1, 10000, 3]
下面再举一个bool的列表的例子:
import torch
a=torch.tensor([True,True,False])
print('原来的a:',a)
def x(a):
a[a.clone()]=torch.tensor([False,False])
print('函数x里面的a:',a)
x(a)
print('经过x(a)以后:',a)
输出:
原来的a: tensor([ True, True, False])
函数x里面的a: tensor([False, False, False])
经过x(a)以后: tensor([False, False, False])
详细解释可以参考
(39条消息) python基础05-函数参数的传递以及浅拷贝问题_东阳z的博客-CSDN博客_python 函数 防止参数复制