python基础(三)
缓存机制
1、id is ==
is 比较的是内存地址
== 比较的数值是否相等
id 获取对象的内存地址
总结:两个数据的内存的地址相同,两个的数据值一定相同
2、代码块
代码块:我们所有的代码都需要依赖代码块执行
一个文件就是一个代码块
交互式命令下一行就是一个代码块
3、两个机制:同一个代码块下,有一个机制,不同的代码块下,遵循另一个机制
4、同一个代码块下的缓存机制(字符串驻留机制)
前提条件:在同一个代码块内
机制内容:Python在执行同一个代码块的初始化对象的命令时,会检查是否已经存在,如果存在,会将其重用,换句话说 ,执行同一代码块时,遇到初始化对象的命令时,他会将初始化的这个变量与存储在一个字典中,在遇到新的变量时,会先在字典中查询记录,如果有同样的记录那么它会重复使用这个字典中之前的这个值,所以在你给出的例子中,文件执行时候(同一代码块)会把相同的两个变量指向同一个对象,满足缓存机制则他们在内存中存在一个,即:id相同。
适用对象:int bool str
具体细则:所有的数字,bool,几乎所有的字符串
优点:提升性能,节省内存
5、不同代码块下的缓存机制(小数据池)
前提条件:不同代码块之间
机制内容:python自动将-5~256的整数进行了缓存,创建一份,当你将这些字符串赋值给变量时,并不会重新创建对象,而是使用字符串驻留池中创建好的对象。
其实,无论是缓存还是字符串驻留池,都是python做的一个优化,就是将-5~256的整数,和一定规则的字符串,放在一个“池”中,无论程序中那些变量指向这些范围内的整数或者字符串,那么他直接在这个‘池’中引用,言外之意,就是内存中之创建一个。
适用对象:int bool str
具体细则:-5~256的整数,bool,一定规则的字符串
优点:提升性能,节省内存
6、总结:
1、面试题
2、回答的时候一定要分清楚:同一代码块适用一个缓存机制,不同代码块适用另一个缓存机制(小数据池)
3、小数据池:数字的范围-5~256
4、缓存机制的优点:提升性能,节省内存
深浅拷贝
浅拷贝:
深拷贝:
l1 = [1,3,5,[22,88]] l2 = l1.copy() print(l1) # [1, 3, 5, [22, 88]] print(l2) # [1, 3, 5, [22, 88]] l1[-1].append(666) print(l1) # [1, 3, 5, [22, 88, 666]] print(l2) # [1, 3, 5, [22, 88, 666]] print("---------------------------------") import copy l1 = [1,3,5,[22,88]] l2 = copy.deepcopy(l1) print(l1) # [1, 3, 5, [22, 88]] print(l2) # [1, 3, 5, [22, 88]] l1[-1].append(666) print(l1) # [1, 3, 5, [22, 88, 666]] print(l2) # [1, 3, 5, [22, 88]] # 总结: # 浅拷贝:list dict 嵌套的可变数据类型元素是同一个 # 深拷贝: list dict 嵌套的可变数据类型不是同一个
------------------- end -----------------------