Python 变量赋值过程

Python中,变量的赋值过程与C, C++, JAVA均是不同的。这几种语言都是先定义了一个变量,并在内存中为这一变量分配了空间,然后当赋值时,直接往这个空间写数据就可以了。所以变量的内存地址是不变的。

        但Python的变量赋值过程更像是寻找映射或者说配对的过程,即变量名在一个空间,值在另一个空间,通过=将这两个空间连接起来。其实,如果将变量名看成C中的指针,更好理解。赋值过程首先是在内存中为值分配空间,并将值写进这个空间,然后通过=将变量名指向这个存了值的空间。Python中可以使用id()函数查看内存地址。在Python3.0以后,同一个常量在内存中会有多个地址,即内存中存了多个同一常量,当把常量值赋给变量时,则会随机选择一个存了这一常量值得地址给变量;如果内存中没有这个常量值,则会先在内存中生成常量,再将地址赋给变量。当某一变量值改变时,相当于将这个变量对应到另一个内存地址。

        实际上,变量自身是没有地址的,变量的地址在Python中就是其指向的常量在内存中的地址。所以,直接使用i,而不给i赋值,语法上是通不过的,因为没有给变量i分配空间。

[python]  view plain copy
  1. >>> i=2013  
  2. >>> id(i)   
  3. 36580096  
  4. >>> i=2013  
  5. >>> id(i) #虽然i均为2013,但地址不一样  
  6. 36559280  
  7. >>> j=2013   
  8. >>> id(j) #j与i也相同,但地址也不一样  
  9. 36559616  
  10. >>> i=j   
  11. >>> id(i) #只有当使用i=j的时候,二者的地址才一样,这相当于将两个指针指向同一个内存地址  
  12. 36559616  
  13. >>> id(2013)  
  14. 36559280  
  15. >>> id(2013#可以测试对于2013,内存中多处存了这一值  
  16. 36580096  

        以上测试来自Python3.3。Python3.0以前的版本中,常量值在内存中好像是唯一的,未测试。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值