Python中变量的地址是什么?id()返回数据还是变量地址?
Python与C语言中「变量-数据」关系的核心差异
1. Python的id()返回的是对象地址,不是变量地址
你写的Python代码里,id(a)和id(2)结果一致,这是因为Python的变量本质是指向对象的引用,而非C语言那种存储数据的内存容器:
id()函数返回的是整数对象2在内存中的地址,不是变量a自身的地址。- 变量
a只是一个「名字」,它的作用是绑定到对象2上,就像给对象贴了个标签。
2. 关于你问的「红色问号处的值」
对应你提到的Python内存模型图,红色问号位置(变量a的存储内容)存的是整数对象2的内存地址——也就是你打印出来的140704200824512。
Python的变量都存放在命名空间里,命名空间可以理解成一张字典:键是变量名(比如a),值就是对应对象的内存地址。执行a=2时,就是在命名空间里新增一组映射:把a这个名字和整数2的地址关联起来。
3. C语言的变量模型:容器式存储
C语言的变量是实打实的内存容器:
- 执行
int a=2时,系统会分配一块固定大小的内存区域(比如4字节),这块内存的地址就是&a返回的60fe1c,而内存里直接存储的数据就是2。 - 你对
a赋值,是直接修改这块内存里的内容,变量和存储数据的内存是绑定的。
4. 为什么说Python没有「实际的变量」
Python里不存在C那种对应固定内存块的变量,所有变量都是命名空间中的条目——本质是「变量名字符串」到「对象内存地址」的映射。比如你执行a=3,并不是修改原来的内存内容,而是把a这个名字重新绑定到整数对象3的地址上,原来的整数2如果没有其他引用,会被Python的垃圾回收机制自动回收。
打个直白的比方:
- C里的
a是个盒子,盒子里装着2;改a=3就是把盒子里的东西换成3。 - Python里的
a是张便签,贴在装2的盒子上;改a=3就是把便签撕下来,贴到装3的盒子上。
内容的提问来源于stack exchange,提问作者simplerandbetter
相关产品推荐
相关产品推荐

