python"自增"了解一下

本文解释了Python中为何没有自增运算符,并介绍了Python中数字类型的不可变特性。此外,还探讨了Python如何通过整数池来优化常用数值的内存使用。

许多语言里都有自增,像++i就是将i的值增加1。
写Python的时习惯性地用了自增运算,结果发现程序中的++i并没有增加1。怎么回事呢?python中的++i到底是什么意思?

原来python中的数字类型是不可变数据。意思说的是数字类型数据在【内存】中是不会发生改变,当变量值发生改变时,会新申请一块内存赋值为新值,然后将变量指向新的内存地址

>>> a = 10
>>> id(a)
140698656902112
>>> a = a+1
>>> id(a)
140698656902144

可以看到当a的值发生改变时,a指向的内存地址也发生了改变。而在C语言中,a指向的内存地址并不会发生改变,而是改变内存的内容。

从这里就可以理解为什么”自增”为什么在python中不存在。++代表改变了对象本身,而python中数字类型是不可变,既然不可变又何来自增?这更像是一个设计哲学的问题,而不是一个技术问题~

那么++i到底是什么?这两个+实际是表示数据正负的正号~而不是其他语言中的自增。

令人惊奇的是,对于使用频繁的数字,为了节省内存,python中有个叫整数池的东西,据我在python3.5.4上测试,整数池包括-5~256。也就是说,在[-5, 256]范围内,值相同的变量都指向了同一内存地址。

>>>a = -5
>>>b = -5
>>>a is b
>>>True

>>>a = 256
>>>b = -256
>>>a is b
>>>True
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值