python中的变量不是容器,而是标签
在python中,“变量”这个名称具有一些误导性,应该叫“名称”或“标签”
- 对变量的常见解释是存储值的容器,对于C语言来说这个解释是合理的,但是对python来说不算精确
- python中的变量不是容器,而是指向python对象的标签,对象位于解释器的命名空间中,但是任意数量的标签可以指向同一个对象,当对象发生变化时,所有指向它的变量的值都会改变。
if __name__ == '__main__':
a = [1, 2, 3]
b = a
c = b
b[1] = 5
print(a, b, c)
这段代码的运行结果是:
[1, 5, 3] [1, 5, 3] [1, 5, 3]
之所以这样,是因为三个标签都指向了同一个对象,如果对象发生了变化,则三个标签都会反映出来。
如果变量指向的是常量或者不可变值,上述区别就不是很明显了:
if __name__ == '__main__':
a = 1
b = a
c = b
b = 5
print(a, b, c)
这段代码的运行结果是:
1 5 1
所有重要的区别在于标签所指向的是对象还是常量