请在第一次调用函数时解释代码跟随调用的方式。但是当第二次调用函数时,它不会遵循相同的。
##functions
num = [0,1,2,3,4]
def first(num1):
num1.append([5, 6]);
print(num1)
def second(num1):
num1 = num1 + [7, 8];
print(num1)
print(num)
first(num)
print(num)
second(num)
print(num)
答案 0 :(得分:1)
在first
中,参数通过引用传递,并使用该引用在函数内部进行修改。
在second
中,使用了名称num1
,但也分配了一个新值。 num1
绑定到一个新值,这不会改变传入的原始值。
答案 1 :(得分:0)
在第一种方法中,您将列表附加到num1,该列表基本上指向该点的num,因此基本上它指的是相同的位置,而在第二种方法中,您将向num1添加列表以创建新位置。 通过使用函数id()可以更好地理解,它基本上为每个对象提供唯一的整数值。
##functions
num = [0,1,2,3,4]
def first(num1):
print(id(num1)) # obj reference
num1.append([5, 6]);
print(id(num1))
print(num1)
def second(num1):
print(id(num1))
num1 = num1 + [7, 8];
print(id(num1))
print(num1)
print(num)
first(num)
print(num)
second(num)
print(num)
如果运行上面的代码,你会发现在操作前后的第一个方法中对象引用是相同的,而在第二个方法中它是不同的。
输出:
[0, 1, 2, 3, 4]
140360682379784
140360682379784
[0, 1, 2, 3, 4, [5, 6]]
[0, 1, 2, 3, 4, [5, 6]]
140360682379784
140360672905160
[0, 1, 2, 3, 4, [5, 6], 7, 8]
[0, 1, 2, 3, 4, [5, 6]]
本文也将帮助您更好地理解按值调用的概念,并在python中通过引用调用。 Is Python call-by-value or call-by-reference? Neither
您可以在此处尝试代码:Code