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,一定规则的字符串

优点:提升性能,节省内存

image

6、总结:

1、面试题

2、回答的时候一定要分清楚:同一代码块适用一个缓存机制,不同代码块适用另一个缓存机制(小数据池)

3、小数据池:数字的范围-5~256

4、缓存机制的优点:提升性能,节省内存

深浅拷贝

浅拷贝:


image

深拷贝:

image

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 -----------------------

对于一个有思想的人来说,没有地方是荒凉而遥远的
原文地址:https://www.cnblogs.com/quanag/p/12630213.html