问题引出
我们先来看一下下面这段代码:
# python
a = 10
b = 20
a,b = b,a
我们发现这是python中特有的语法,在C/C++中尝试运行这段代码的话会直接报错
为了弄清除这个问题,我们看一下下面这个图

个人理解
从图中我们可以看到,和C/C++不同的是,python中一切皆为对象,这里的a保存的是对象 (int 10)的地址,b保存的是对象(int 20)的地址。而赋值操作在python中仅仅是改变了引用的指向而已(在C中是将a内所保存的数据(指针地址)改变),因此在python中,不需要静态指定数据类型,因为a所指向的地址已经包含了数据类型。因此python可以实现上述语法,而且不需要静态指定类型。
a, b = b, a的字节码层面的执行
>>> def func():
a,b = b, a
>>> dis.dis(func)
2 0 LOAD_FAST 0 (b)
2 LOAD_FAST 1 (a)
4 ROT_TWO
6 STORE_FAST 1 (a)
8 STORE_FAST 0 (b)
10 LOAD_CONST 0 (None)
12 RETURN_VALUE
可以看到,经过压栈,出栈,实现了a, b引用指向的交换。
2万+



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



