重复编辑:还有另外一个question被标记为相似,但它不同,因为它只涉及.append和完整列表实例。我的问题是关于偏移分配(data [j])和迭代器(在第一个函数中使用)。Python by-object confusion
我很困惑与Python的对象信息传递。从我的教科书中,当函数收到它的参数时,它会为初始对象创建一个别名。此外,关于可变参数:“我们注意到,通过设置list = []将新值重新分配给形式参数不会改变实际参数;这样的重新分配将打破别名”。
现在我有这2个功能:
def mult(data, factor):
for val in data:
val *= factor
data = [i for i in range(5)]
mult(data, 3)
print(data)
def mult2(data, factor):
for j in range(len(data)):
data[j] *= factor
data = [i for i in range(5)]
mult2(data, 3)
print(data)
这产生输出分别0,1,2,3,4和0,3,6,9,12。
在mult2中,我们通过重新分配新值来更改数据的值。为什么没有别名被破坏?
另外,在第一个函数中,如果我遍历每个列表的值并且我改变它,那么别名是否被破坏?
尝试从函数返回值:'return val'然后将函数的结果作为变量存储并输出:'data = scale1(data,3); print(data)' – GH05T
我知道val只是一个int,我的问题是数据。为什么val不会改变数据的价值? – Maude