Python 变量,是容器还是标签?

入门教程、案例源码、学习资料、读者群

请访问: python666.cn

大家好,欢迎来到 Crossin的编程教室 !

上一次,我们聊了点关于 Python 中变量的基础知识点。今天继续这个话题聊下去。

1. 变量的赋值

之前说到,Python 中的「赋值」操作符就是一个等号(=)。通过赋值操作可以创建一个变量,也可以修改一个变量的已有值。

那有人就要说了:

为什么 a = 1 可以赋值,1 = a 就会报错?这不都是一个等式吗?

这是因为 Python 的赋值操作符(=)并不等同于数学中的等式。数学中等式满足交换律,左右两边互换没有问题。但编程中的赋值是有方向的,是把等号右边的结果赋值给左边的变量。

理解了赋值的方向性,很多语法就好理解了:

a = 1

就是把右边的数值1赋值给左边的变量a,这没毛病。

1 = a

右边是变量a的值这没问题,但左边被赋值的是一个数值,这就不行了,所以报错。❌

因为是把右边的“结果”赋值给左边的变量,所以右边不仅可以是一个固定值,也可以是个计算式:

a = 1 + 2 * 3 ** 4 / 5

这个计算式里也可以含有变量:

b = 3
a = b * 2 + 3

甚至可以带有函数,只要保证计算式本身是可执行的就行:

a = input() + 'abc'

于是,被赋值的变量本身也可以作为右边计算式的一部分:

a = 2
a = a + 1

这个式子以数学的眼光来看显然是不成立,但在编程中非常常见,作用就是把变量 a 的值增加 1。

它还有个简化写法:

a += 1

类似还有 -=、*=、/=、%=、//= 等等。

如果你学过 C++,应该知道这种变量自增 1 的语句还有种更简化的写法:

a++

但不好意思,这里是 Python,不能这么写。❌

至于数学中的等式,Python 更接近的比较运算符(==),比如:

a == 1
2 == a
1 + 3 == a + 3

用来判断(==)左右两边的计算结果是否相等,结果是 True 或者 False。这个我们下回再来细说。

2. Python 变量不是一个「容器」

接下来讲的这点有一点点进阶。

很多人在了解的变量的使用之后,可能会把变量想象一个装数据的「容器」,就好比一个杯子,赋值就是往里面倒饮料,重新赋值就是倒上其他的饮料。

这种理解在 C++ 这样的语言里是没有问题的。也正因为如此,C++ 才需要在使用前「定义」变量,确定类型,程序也会分配好对应的内存空间。

但可惜,在 Python 里这个理解是错误的。❌

Python 里的变量,与其说是装数据的容器,倒不如说是贴在数据上的标签。

变量并不占用空间,占用空间的是数据本身。当你重新赋值时,就相当于撕下这个标签,贴纸另一个数据上。

Python 中所有东西都是对象,包括函数、类、模块,甚至是字符串’hello’,数字1、2、3,都是对象。

用个例子来说明:

a = 1
b = 2
c = 1
# 再次赋值
a = b

在这个代码里,a 和 c 其实指向的是同一个对象—整数 1。给 a 赋值为 b 之后,a 就变成了指向 2 的标签,但 1 和 c 都不会受影响。

示意图:

8249a916f88e1e48f2351cfe4392e844.jpeg

更有说服力一点的验证:

a = 1
print('a', a, id(a))
b = 2
print('b', b, id(b))
c = 1
print('c', c, id(c))
# 再次赋值
a = b
print('a', a, id(a))

输出:

a 1 4301490544
b 2 4301490576
c 1 4301490544
a 2 4301490576

id() 可以认为是获取一个对象的地址。可以看出,a 和 c 开始其实是同一个地址,而后来赋值之后,a 又和 b 是同一个地址。

每次给变量重新赋值,它就指向了新的地址,与原来的地址无关了。

关于这方面的详细解释,可以参考之前的几篇文章:

对于 Python 的变量赋值,你还要什么想了解的内容?欢迎在留言区讨论。


以下是视频时间,欢迎大家关注、点赞、转发:


Crossin的新书《码上行动:零基础学会PYTHON编程(CHATGPT版)》已经上市了。

0018fa616b2ccb144fe88752ac4811be.jpeg

本书力求做到浅显易懂,让完全没有编程经验的零基础“小白”也能学会Python。内容从环境搭建这种最基础的步骤开始讲起,逐渐深入到常见的实际应用当中。在讲解知识点的同时配有相应的代码示例,让读者可以边学边练加深理解。书中还创新地使用 ChatGPT 作为编程学习的辅助,带领读者探索AI时代下学习编程的新模式。

公众号的读者朋友们购买后可在后台联系我,加入读者交流群,Crossin会为你开启陪读模式,解答你在阅读本书时的一切疑问。

感谢转发点赞的各位~


_往期文章推荐_

Python变量基础


如需了解付费精品课程教学答疑服务

请在Crossin的编程教室内回复: 666

d4c2c84ab1d1b157bed77170a628e679.jpeg

猜你喜欢

转载自blog.csdn.net/qq_40523737/article/details/131778133