python memory allocation
讲一讲在python中对变量的内存分配
首先看一下c/c++语言中执行
1
2
3
4
int a = 1;
cout << &a;
>>> 0x73fe1c
代表了在内存中找出一块内存来分给变量a,这块内存的值为1,再执行
1
2
3
4
a = 2;
cout << &a;
>>> 0x73fe1c
可以看出内存地址没有变化,也就是说变量a和这块内存绑定了,改变a的值只是改变这块内存的值
再来看看Python中的变量分配
1
2
3
4
5
6
7
8
9
a = 1
print(id(a))
>>> 140724140667136
a = 2
print(id(a))
>>> 140724140667168
发现两次变量a的地址不一样了,这是为什么呢?
因为在Python中一切皆是对象,而变量只是对变量的引用 ( 或称标签 ),对对象的操作都是通过对引用来完成的,所以数字 1 是一个对象,内存为这个对象分配空间,而a只是一个标签,在执行 a=2后,这个标签绑定了另外一个对象,也就是2,用图来表示
变量只是一个标签,本身并不具有任何信息,而类型信息存储在对象中,这和c/c++有很大的出入