之前一直在学C和C++,现在初学python,把两种语言对比着学也不失为一种好方法。
不论初学哪种程序语言,变量赋值语句都是最最基本的一种语句。从实现的底层原理上看,对于变量赋值语句而言,C语言是“装盒子式”的,python是“贴标签式”的。比如:
对于C语言而言,假如有一条赋值语句:
int a;
a = 10;
那么C语言的对这一条语句的处理是:
①在内存中为变量a找到一片供存储的内存空间;
②往这一片内存空间中填上10.
但如果是python,赋值语句
a = 10
(以下是我的理解)实际上是现在内存空间中找到一片区域存储10,之后再把a作为一个标签贴在10这一片区域上.
所以比较起来,C语言实际上就是先为变量找到一片内存,再往里面填东西;而python实际上是先为“东西”找到一片内存,再往上面贴标签。
实现原理的不同也就造成了C语言和python语言在变量赋值的一些不同之处,比如对于python,有以下几条shell语句:
>>> old = [1, 2, 3, 4, 5]
>>> new = old
>>> old = [6]
如果按照C语言的方式来理解,那么new和old可以看成是指向同一片内存空间的指针,所以old改变了,new也应该改变;但实际上结果是:
>>> print(new)
[1, 2, 3, 4, 5]
这正是python贴标签式的变量赋值方法导致的。old = [6]这个语句实际上是将old这个标签贴在了一片新的内存空间上,这片内存空间中存储了[6]这个列表。验证如下:
>>> id(new)
46077632
>>> id(old)
45876008
可以看出old在被赋了新值后不再是指向原来的内存空间了,而这和C语言是完全不同的。