Python采用基于值的内存管理模式,相同的值在内存中只有一份。这是很多Python教程上都会提到的一句话,但实际情况要复杂的多。什么才是值?什么样的值才会在内存中只保存一份?这是个非常复杂的问题。
0、首先明确一点,整数、实数、字符串是真正意义上的值,而上面那句话中的“值”主要指整数和短字符串。对于列表、元组、字典、集合以及range对象、map对象等容器类对象,它们不是普通的“值”,即使看起来是一样的,在内存中也不会只保存一份。
1、对于[-5, 256]之间的整数,会在内存中进行缓存,任何时刻在内存中只有一份。
对于任意对象,系统会维护一个计数器时刻记录该对象被引用的次数。每次有新的对象引用该对象,其计数器加1,每次使用del释放一个引用,其计数器减1,如果垃圾回收机制发现某对象的引用次数为0,则将其删除。对于[-5, 256]之间的整数,系统会进行缓存,系统本身也有大量对象在引用这些值。
不在[-5, 256]之间的整数,系统不会进行缓存。
2、然而,在下面的情况中,却又打破了这个规律。
那是不是可以说,如果把大整数放进列表或元组中,在内存中就只有一份了呢?错!不能这么说。准确地说,应该是同一个列表或元组中的大整数在内存中会保存一份。
3、对于实数,由于计算机存储实数会有精度问题,很难精确存储,所以不进行缓存,也就是说,即使看起来是一样的实数,在内存中也不是一份。
4、对于字符串,是否进行缓存,是一个复杂的事情,并不是单纯地看长度。
回想前面把大整数放进同一个列表或元组的情况,那么如果把长字符串放进列表或元组中,会不会也只保存一份呢?很遗憾,不会。
----------相关阅读----------
1900页Python系列PPT分享一:基础知识(106页)
1900页Python系列PPT分享二:Python序列(列表、元组、字典、集合)(154页)
1900页Python系列PPT分享三:选择与循环结构语法及案例(96页)
1900页Python系列PPT分享四:字符串与正则表达式(109页)
1900页Python系列PPT分享五:函数设计与应用(134页)
1900页Python系列PPT分享六:面向对象程序设计(86页)
1900页Python系列PPT分享七:文件操作(132页)
报告PPT(163页):基于Python语言的课程群建设探讨与实践
淡定!不要因为纳入了高考和二级考试甚至极个别小学课程就盲目夸大Python!
----------喜大普奔----------
1、董付国老师Python系列教材:
《Python程序设计基础》
《Python程序设计(第2版)》
《Python可以这样学》(本书已被引入台湾发行繁体版)
《Python程序设计开发宝典》
《中学生可以这样学Python》
董付国老师6本Python系列教材被北大、复旦等近百所高校选作教材
2、董老师免费视频地址: https://pan.baidu.com/s/1jJeAs8Q 密码: px59
3、董老师CSDN学院9套“Python可以这样学”收费视频课程汇总地址:https://edu.csdn.net/search?keywords=%E8%91%A3%E4%BB%98%E5%9B%BD&type=0