python的本质_python变量的实质

python变量的实质是引用

当你声明一个新变量并给其赋值时,python会先检查这个值,如果是-5至256区间的小整数,那么python解释器会从small_ints缓存中直接将对应数值的内存地址赋给变量,不需要生成新的值。如果不是-5至256区间的小整数,解释器会生成这个值,然后将其内存地址赋给变量。

如果是改变一个变量的值,解释器会将新的值的内存地址赋给变量,同时还会释放旧的值所占的内存空间。

>>> a=-5

>>> b=[-5]

>>> print(id(a),id(b[0]))

140734630008288 140734630008288

>>> a=-6

>>> b=[-6]

>>> print(id(a),id(b[0]))

2356957313296 2356957313328

>>> a=256

>>> b=[256]

>>> print(id(a),id(b[0]))

140734630016640 140734630016640

>>> a=257

>>> b=[257]

>>> print(id(a),id(b[0]))

2356957312944 2356957313296

在静态语言中变量实质是指针,指向预分配的内存块,改变变量值时若这个值超过该内存块能存放的范围就会发生溢出。如果改变变量的值在可存放范围内,则改变该内存块存放的值。下面是kotlin的案例。

var num:int=100 // 声明一个num变量,类型是占4字节空间的整数

num=2147483650 // 给num赋值大于2的31次方的数值时会报错,该数值超过int类型能表示的最大值,只有占8字节空间的长整形才能存放。

通过以上对比可以了解python的变量实质是引用。优点是改变变量值时不用考虑内存申请和释放,也不用考虑新值和旧值类型是否一致等问题,大大减轻程序员的工作量,缺点是系统开销大,运行效率低。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值