![](http://m.sbmmt.com/img/upload/article/000/000/037/5d105aaf887b0885.jpg)
python中赋值与c语言区别?先来看看简单的 Python 代码在内存中是什么样子的:
b = 3 b = b + 5
它在内存中的操作示意图是这样的:
然而,从代码的的字面意思上看,“把 3 赋给 b,把 b 加 5 之后再赋给 b。”
也就是把代码看成这个样子:
b ← 3 b ← b + 5
所以下面这张在内存中的操作图可能更符合我们的直觉:
也即 b + 5 的值又写回到 b 中。典型的 C 程序就是这样的。为变量 b 分配一个 int 型的内存单元,然后将整数 3 存放在该内存单元中。b 就代表了该块内存空间,不再移动,可以更新 b 的值,但 b 在内存中的地址就不再变化了。所以我们说 b = b + 5,就等于 b ← b + 5,把 b 的值加 5 之后还依然放入 b 中。 变量 b 和它所在内存空间紧紧绑定在一起。
相关推荐:《Python视频教程》
而再看看上面 Python 中的内存示意图,b + 5 得到了一个新值,然后令 b 指向了这个新值。换句话说,它做的是事情是这样的:
b → 3 b → b + 5
先令 b 指向 3,再令 b 指向 b + 5 这个新值。
C 程序更新的是内存单元中存放的值,而 Python 更新的是变量的指向。
C 程序中变量保存了一个值,而 Python 中的变量指向一个值。
如果说 C 程序是通过操纵内存地址而间接操作数据(每个变量固定对应一个内存地址,所以说操纵变量就是操纵内存地址),数据处于被动地位,那么 Python 则是直接操纵数据,数据处于主动地位,变量只是作为一种引用关系而存在,而不再拥有存储功能。
在 Python 中,每一个数据都会占用一个内存空间,如 b + 5 这个新的数据也占用了一个全新的内存空间。
Python 的这种操作让数据成为主体,数据与数据之间直接进行交互。
而数据在 Python 中被称为对象 (Object)。
这句话并不太严谨。不过在这个简单的例子中是成立的。
一个整数 3 是一个 int 型对象,一个 'hello' 是一个字符串对象,一个 [1, 2, 3] 是一个列表对象。
Python 把一切数据都看成「对象」。它为每一个对象分配一个内存空间。 一个对象被创建后,它的 id 就不再发生变化。
id 是 identity 的缩写。意为“身份;标识”。
在 Python 中,可以使用 id(),来获得一个对象的 id,可以看作是该对象在内存中的地址。
一个对象被创建后,它不能被直接销毁。因此,在上个例子中,变量 b 首先指向了对象 3,然后继续执行 b + 5,b + 5 产生了一个新的对象 8,由于对象 3 不能被销毁,则令 b 指向新的对象 8,而不是用对象 8 去覆盖对象 3。在代码执行完成后,内存中依然有对象 3,也有对象 8,变量 b 指向了对象 8。
如果没有变量指向对象 3(即无法引用它了),Python 会使用垃圾回收算法来决定是否回收它(这是自动的,不需要程序编写者操心)。
一个旧的对象不能被覆盖,因旧的对象交互而新产生的数据会放在新的对象中。也就是说每个对象是一个独立的个体,每个对象都有自己的“主权”。因此,两个对象的交互可以产生一个新的对象,而不会对原对象产生影响。在大型程序中,各个对象之间的交互错综复杂,这种独立性则使得这些交互足够安全。
C 程序为每个变量都分配一个了固定的内存地址,这保证了 C 变量之间的独立性。
C 语言是变量(也即内存地址)之间的交互,Python 是对象(数据)之间的交互。这是两种不同的交互方式。
以上就是python中赋值与c语言区别的详细内容,更多请关注php中文网其它相关文章!