首页 > 应用开发 > Python > python里面的深浅拷贝
# 列表示例lst = [1,1,3]lst1 = lstlst1.append(4) //正常思维理解应该是lst1更改后,lst不会改变,但是赋值是多个变量名指向同一个内存 空间,因此只要一个变量改变,另一个变量也改变 print (lst,lst1)[1, 1, 3, 4] [1, 1, 3, 4]# 字典示例dic = {'k1':1,'k1':1}dic1 = dicdic1.update({'k1':111})print (dic,dic1){'k1': 1, 'k1': 111} {'k1': 1, 'k1': 111}
# 列表中浅拷贝有两种方式lst = [1,1,3]new_lst = lst.copy()lst = [1,1,3]new_lst = lst[:]
#列表示例1 列表中未嵌套第二层元素lst = [1,1,3]new_lst = lst.copy()new_lst.append(4)print (lst,new_lst)[1, 1, 3] [1, 1, 3, 4]# 浅拷贝中lst和new_lst结果不同print (id(lst),id(new_lst))140584614767176 140584614774344 # 浅拷贝中lst和new_lst内存空间地址不同# 列表示例1 列表中嵌套了第二层元素lst = [1,1,[3,4,5]]new_lst = lst.copy()new_lst.append(6)print (lst,new_lst)[1, 1, [3, 4, 5]] [1, 1, [3, 4, 5], 6]print (id(lst),id(new_lst))140431875130951 140431874963911print (id(lst[1]),id(new_lst[1]))# 浅拷贝只拷贝第一层内存空间,因此两个列表的第二个嵌套的元素的值内存空间相同140633470413384 140633470413384
lst = [1,3,[4,5],6]lst1 = lstlst1 = lst[:]lst1[-1] = [8,9]lst1[-1].append([0]) #数字无法进行追加操作print (lst,lst1,lst1)AttributeError: 'int' object has no attribute 'append'
import copylst = [1,1,[3,4]]new_lst = copy.deepcopy(lst)print (id(lst[0]),id(new_lst[0])) #lst[0]为1,1是整型,是不可变数据类型 --> 共用内存空间地址4464777164 4464777164print (id(lst[-1]),id(new_lst[-1]))140663166316984 140663166494088 #lst[-1]为[3,4],[3,4]是列表,是可变数据类型 --> 新开辟内存空间地址
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69984368/viewspace-2730559/ ,如需转载,请注明出处,否则将追究法律责任。