值传递和引用传递
例一:
a = 1 #这里首先将 1 赋值于 a,即 a 指向了 1 这个对象
b = a #接着 b = a 则表示,让变量 b 也同时指向 1 这个对象。这里要注意,Python 里的对象可以被多个变量所指向或引用。
a = a + 1 #最后执行 a = a + 1。需要注意的是,Python 的数据类型,例如整型(int)、字符串(string)等等,是不可变的。所以,a = a + 1,并不是让 a 的值增加 1,而是表示重新创建了一个新的值为 2 的对象,并让 a 指向它。但是 b 仍然不变,仍然指向 1 这个对象。
print(a) #输出 2
print(b) #输出 1
通过这个例子你可以看到,这里的 a 和 b,开始只是两个指向同一个对象的变量而已,或者你也可以把它们想象成同一个对象的两个名字。简单的赋值 b = a,并不表示重新创建了新对象,只是让同一个对象被多个变量指向或引用。
同时,指向同一个对象,也并不意味着两个变量就被绑定到了一起。如果你给其中一个变量重新赋值,并不会影响其他变量的值。
明白了这个基本的变量赋值例子,我们再来看一个列表的例子:
l1 = [1, 2, 3]
l2 = l1
#同样的,我们首先让列表 l1 和 l2 同时指向了 [1, 2, 3] 这个对象。
l1.append(4) #由于列表是可变的,所以 l1.append(4) 不会创建新的列表,只是在原列表的末尾插入了元素 4,变成 [1, 2, 3, 4]。
#由于 l1 和 l2 同时指向这个列表,所以列表的变化会同时反映在 l1 和 l2 这两个变量上,那么,l1 和 l2 的值就同时变为了 [1, 2, 3, 4]。
print(l1)</

本文详细解释了Python中的值传递和引用传递概念,通过实例说明变量如何指向对象,以及可变与不可变对象在赋值和函数调用中的行为差异。重点讨论了如何在函数中修改变量值和列表操作的影响。

1万+

被折叠的 条评论
为什么被折叠?



