Python程序是由代码块构造的。代码块是作为一个单元执行的一段Python程序文本。 同一个代码块内,对对象进行初始化的时候,python解释器会在内存中寻找这个初始化的值是不是已经存在,如果存在则会引用自同一个内存空间。也就是说我们用is进行判断,应该返回的是True。也就是python解释器从上到下进行解释,遇到一个初始化的对象,就把这个对象,以一个类似字典的形式存在一个内存空间中。如果再遇到初始化语句,解释器就在这个内存空间寻找是否有同值的对象,如果有,则引用,如果没有,则重新开辟一个内存空间存放这个初始化的值。 这样做的优点就是简化了内存空间,提升效率,避免重复的去开辟相同的值的内存空间 非同一代码块的缓存机制其实和代码块的缓存机制很像,只不过对缓存的数据做了一些限制,将符合规定的数据存到了一个数据池当中,也就是一块内存空间中。如果你初始化对象值在这个数据池中,那么直接引用就可以,不用再重新开辟一个内存空间存放这个值。这个数据池分为数字数据池和字符串数据池,数字数据池是事先已经创建好了的。 非同一个代码块,’&&*&*123’不符合字符串数据池的缓存机制,但是可以用sys模块的intern方法,强制驻留,强行加入到字符串数据池中。 此外Boolean在内存中就是0或者1就不再做额外讨论了。
代码块的定义
代码块的缓存机制
a = 100000000000000000000532758932759.419375091750151513515 b = 100000000000000000000532758932759.419375091750151513515 print(a is b) # True
c = '1478174%^%&$^&$&sfhoaihfoiaf' d = '1478174%^%&$^&$&sfhoaihfoiaf' print(c is d) # True
s_1 = '#'*4000 s_2 = '#'*4000 print(len(s_1)) print(s_1 is s_2) # True a_1 = '#'*4097 b_1 = '#'*4097 print(len(a_1)) print(a_1 is b_1) # False
非同一代码块的缓存机制
强制驻留
import sys a = sys.intern('&&^*^&*123') b = sys.intern('&&^*^&*123') print(a is b) # True
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算