一、浅拷贝copy.copy()
数据半独立,看下面例子
1、一层列表,能够完全拷贝,和深拷贝一样的效果
import copy
alist=[1,2,3] #id;2281268077504 blist=copy.copy(alist) # id: 2281267497216 alist.append(13) # 一层列表添加值后,alist的值:[1, 2, 3, 13]
# blist的值不变:[1, 2, 3]
2、嵌套列表,浅拷贝就只拷贝了外层数据,深层数据的内存id依旧是同一个
alist=[1,2,3,[8,9]] #id(alist):1989637956864 id((alist[-1]) :1709628674816 blist=copy.copy(alist) # id(blist): 1989637933056 id((blist[-1])) :1709628674816 跟上面一样
alist[-1].append(13)
#给嵌套列表添加值后,alist的值:[1, 2, 3, [8, 9, 13]]
#blist的子列表中值也跟着变化 :[1, 2, 3, [8, 9, 13]]
二、深拷贝copy.deepcopy()
数据完全独立,外层和深层数据的内存id均不一致
1、一层列表,同浅拷贝,略
2、嵌套列表,深拷贝不只拷贝外层,深层数据也拷贝,id也不一致
alist=[1,2,3,[8,9]] #id;1989637956864 id((alist[-1]) :1709628674816
blist=copy.copy(alist) # id: 1989637933056 id((blist[-1])):1746552654016 跟上面不一样
alist[-1].append(13)
#给嵌套列表添加值后,alist的值:[1, 2, 3, [8, 9, 13]]
#blist的子列表中值不会变化 :[1, 2, 3, [8, 9]]
三、赋值
外层和深层的内存id都一致
1、修改外层列表
alist=[1,2,3,[8,9]] #id;3005312197888 子列表id:3005306530480 blist=alist #id;3005312197888 子列表id:3005306530480 alist.append(13) #alist的值:[1, 2, 3, [8, 9], 13] #blist的值:[1, 2, 3, [8, 9], 13]
2、修改子列表,内存id依旧完全一样
alist=[1,2,3,[8,9]] #id;1729717527808 子列表id:1729718080384 blist=alist #id;1729717527808 子列表id:1729718080384 alist[-1].append(13) #alist的值:[1, 2, 3, [8, 9, 13]] #blist的值:[1, 2, 3, [8, 9, 13]]
标签:13,python,alist,列表,blist,拷贝,id,赋值 From: https://www.cnblogs.com/docstrange/p/17284560.html