python复制list
一般采用
1.直接引用 a=b
速度 切片>list()>copy.copy()
2.切片法 a=b[:]
3.list列表构造函数 a=list(b)
4.a=copy.copy(b)
#都列表的子列表都是指引到同一个对象上
5.深拷贝a=copy.deepcopy(b)
列表的子列表也会被拷贝
速度最慢,慢得离谱,是切片的300倍
python复制字典
一般采用
1.直接引用 a=b
3.a=dict.copy(b)
4.a=copy.copy(b)
# 深拷贝 和 浅拷贝,都会创建一个新的对象,但是浅拷贝创建的对象所用的子对象和之前一样,深拷贝则全部不一样
# 浅的意思就是干的活少,只是指向了这个对象,深就是干的活多,全部拿过来
import copy
a = [1, 2, 3, 4, ['a', 'b']] # 原始对象
b = a # 赋值,传对象的引用
c = copy.copy(a) # 对象拷贝,浅拷贝 等同于 c=a.copy()/list(a)/a[:]/a*1
d = copy.deepcopy(a) # 对象拷贝,深拷贝
a.append(5) # 修改对象a
a[4].append('c') # 修改对象a中的['a', 'b']数组对象
print('a = ', a)
print('b = ', b)
print('c = ', c)
print('d = ', d)
print(id(a))
print(id(b)) # id(a)==id(b)
print(id(c))
print(id(d))
print("-"*50)
print(id(a[0])) # 相同数字的id肯定相同
print(id(b[0]))
print(id(c[0]))
print(id(d[0]))
print("-"*50)
print(id(a[4]))
print(id(b[4]))
print(id(c[4])) # id(a[4]) == id(b[4]) == id(c[4])
print(id(d[4]))
结果如下:
a = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
b = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
c = [1, 2, 3, 4, ['a', 'b', 'c']]
d = [1, 2, 3, 4, ['a', 'b']]
2885025877384
2885025877384
2885025906120
2885025981064
--------------------------------------------------
1534112832
1534112832
1534112832
1534112832
--------------------------------------------------
2885025981640
2885025981640
2885025981640
2885025876680