首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python中相同的值在内存中到底会保存几份

Python采用基于值的内存管理模式,相同的值在内存中只有一份。这是很多Python教程上都会提到的一句话,但实际情况要复杂的多。什么才是值?什么样的值才会在内存中只保存一份?这是个非常复杂的问题。

0、首先明确一点,整数、实数、字符串是真正意义上的值,而上面那句话中的“值”主要指整数和短字符串。对于列表、元组、字典、集合以及range对象、map对象等容器类对象,它们不是普通的“值”,即使看起来是一样的,在内存中也不会只保存一份。

1、对于[-5, 256]之间的整数,会在内存中进行缓存,任何时刻在内存中只有一份。

对于任意对象,系统会维护一个计数器时刻记录该对象被引用的次数。每次有新的对象引用该对象,其计数器加1,每次使用del释放一个引用,其计数器减1,如果垃圾回收机制发现某对象的引用次数为0,则将其删除。对于[-5, 256]之间的整数,系统会进行缓存,系统本身也有大量对象在引用这些值。

不在[-5, 256]之间的整数,系统不会进行缓存。

2、然而,在下面的情况中,却又打破了这个规律。

那是不是可以说,如果把大整数放进列表或元组中,在内存中就只有一份了呢?错!不能这么说。准确地说,应该是同一个列表或元组中的大整数在内存中会保存一份。

3、对于实数,由于计算机存储实数会有精度问题,很难精确存储,所以不进行缓存,也就是说,即使看起来是一样的实数,在内存中也不是一份。

4、对于字符串,是否进行缓存,是一个复杂的事情,并不是单纯地看长度。

回想前面把大整数放进同一个列表或元组的情况,那么如果把长字符串放进列表或元组中,会不会也只保存一份呢?很遗憾,不会。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180210B07DA700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券