标签: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的变量实质是引用。优点是改变变量值时不用考虑内存申请和释放,也不用考虑新值和旧值类型是否一致等问题,大大减轻程序员的工作量,缺点是系统开销大,运行效率低。
标签:otl var 次方 print 缺点 对比 pre 表示 内存
原文地址:https://www.cnblogs.com/fz17/p/13603967.html