python变量的实质

2021-03-29 15:26

阅读:499

标签:otl   var   次方   print   缺点   对比   pre   表示   内存   

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的变量实质是引用。优点是改变变量值时不用考虑内存申请和释放,也不用考虑新值和旧值类型是否一致等问题,大大减轻程序员的工作量,缺点是系统开销大,运行效率低。

python变量的实质

标签:otl   var   次方   print   缺点   对比   pre   表示   内存   

原文地址:https://www.cnblogs.com/fz17/p/13603967.html


评论


亲,登录后才可以留言!