一.is 与 ==
python中 == 是比较二者值是否相同,is用来比较二者的内存地址是否相同.
n1 = -55 n2 = -55 print(n1 == n2) # True print(id(n1), id(n2)) # 1976371124624 1976371124656
n3 = 'ddd' n4 = 'ddd' print(id(n3), id(n4)) # 2543122508856 2543122508856 print(n3 is n4) # True
二.赋值
2.1 小数据池
两个变量分别进行数值赋值操作是,如(n1 = 'goulonghui', n2 = 'goulonghui),存在小数据池概念
小数据池: int,str在一定范围内,如果两个数值相同,为了节省内存,共用一个内存地址
int范围: -5 - 256
字符串:①单个字母*int(20)存在小数据池,包括20
②全是字母或者数字,或者字母和数字的任意组合都存在小数据池, 其他都没有
2.2 变量之间相互赋值
python中两个变量之间的相互赋值,则二者共用同一块内存,内存地址相同.(两基友共用一个充气娃娃实例)
n3 = [1, 2, 3, [11, 22]] n4 = n3 print(n3, id(n3)) # [1, 2, 3, [11, 22]] 2195629156744 print(n4, id(n4)) # [1, 2, 3, [11, 22]] 2195629156744 print(id(n3[-1])) # 2195630020424 print(id(n4[-1])) # 2195630020424
三. 浅拷贝
python中利用copy()命令去进行copy即为浅拷贝.
对于浅拷贝来说,第一层创建的是最新的内存地址,而从第二层开始都指向同一个内存地址,所以对于第二层及更深的层数来说,保持一致性.
l1 = [1, 2, 3, 4, [11, 22, 33]] l2 = l1.copy() # print(l1, id(l1)) # [1, 2, 3, 4, [11, 22, 33]] 2679464274312 # print(l2, id(l2)) # [1, 2, 3, 4, [11, 22, 33]] 2679465137864 # print(l1[-1], id(l1[-1])) # [11, 22, 33] 1436905199432 # print(l2[-1], id(l2[-1])) # [11, 22, 33] 1436905199432 # 例如: # l1.append(5) # print(l1) # [1, 2, 3, 4, [11, 22, 33], 5] # print(l2) # [1, 2, 3, 4, [11, 22, 33]] 因为二者内存地址不相同 l1[4].append(66) print(l1) # [1, 2, 3, 4, [11, 22, 33, 66]] print(l2) # [1, 2, 3, 4, [11, 22, 33, 66]] 因为二者内存地址相同
注意:切片属于浅拷贝
# 切片属于浅拷贝 li = [1, 2, 3, 4, [11, 22, 33]] li1 = li[:] print(li, id(li)) # [1, 2, 3, 4, [11, 22, 33]] 2523075651976 print(li1, id(li1)) # [1, 2, 3, 4, [11, 22, 33]] 2523076515528 内存地址不同 print(li[-1], id(li[-1])) # [11, 22, 33] 2523076515656 print(li1[-1], id(li1[-1])) # [11, 22, 33] 2523076515656 内存地址相同
四.深拷贝
python中利用copy模块下的deepcopy()来进行深拷贝
深拷贝中每一层均是完全独立的.
# 深拷贝 from copy import deepcopy li = [1, 2, 3, ['gou long hui', 'lao gu an tou']] li1 = deepcopy(li) # print(li, id(li)) # [1, 2, 3, ['gou long hui', 'lao gu an tou']] 2009288054664 # print(li1, id(li1)) # [1, 2, 3, ['gou long hui', 'lao gu an tou']] 2009288055944 内存地址不相同 # print(li[3], id(li[3])) # ['gou long hui', 'lao gu an tou'] 1702936217288 # print(li1[3], id(li1[3])) # ['gou long hui', 'lao gu an tou'] 1702936218696 内存地址不相同
# 例 # li.append(4) # print(li) # [1, 2, 3, ['gou long hui', 'lao gu an tou'], 4] # print(li1) # [1, 2, 3, ['gou long hui', 'lao gu an tou']] li[3].append('ni hao a') print(li) # [1, 2, 3, ['gou long hui', 'lao gu an tou', 'ni hao a']] print(li1) # [1, 2, 3, ['gou long hui', 'lao gu an tou']]
来源:https://www.cnblogs.com/glh-ty/p/9003022.html