本文B站配套视频教程
人们经常使用“变量是盒子”这样的比喻,但是这有碍于理解面向对象语言中的引用式变量。Python 变量类似于 Java 中的引用式变量,因此最好把它们理解为附加在对象上的标注或便签。
在示例中所示的交互式控制台中,无法使用“变量是盒子”做解释。示意图说明了在 Python 中为什么不能使用盒子比喻,而便签则指出了变量的正确工作方式。
示例 变量 a 和 b 引用同一个列表,而不是那个列表的副本
>>> a = [1, 2, 3] >>> b = a >>> a.append(4) >>> b [1, 2, 3, 4]如果把变量想象为盒子,那么无法解释 Python 中的赋值;应该把变量视作便利贴,这样示例中的行为就好解释了
刚刚我们说明了两个变量引用同一个数据的情况,再看一种情况:一个变量先后引用不同的数据
定义一个整数变量 a,并且赋值为 1 代码图示a = 1 将变量 a 赋值为 2 代码图示a = 2 定义一个整数变量 b,并且将变量 a 的值赋值给 b 代码图示b = a变量 b 是第 2 个贴在数字 2 上的标签
如果变量已经被定义,当给一个变量赋值的时候,本质上是 修改了数据的引用
变量 不再 对之前的数据引用变量 改为 对新赋值的数据引用再看一看字典的例子:
>>> charles = {'name': 'Charles L. Dodgson', 'born': 1832} >>> lewis = charles >>> lewis is charles True >>> id(charles), id(lewis) (4300473992, 4300473992) >>> lewis['balance'] = 950 >>> charles {'name': 'Charles L. Dodgson', 'balance': 950, 'born': 1832} >>> alex = {'name': 'Charles L. Dodgson', 'born': 1832, 'balance': 950} >>> alex == charles True >>> alex is not charles Truecharles 和 lewis 绑定同一个对象,alex 绑定另一个具有相同内容的对象