python-浅拷贝、深拷贝实例以及讲解

# 1、浅拷贝 与 深拷贝 列表
import copy
a = [11, 22]
b = [33, 44]
c = [a, b]
d = c
e = copy.copy(c) # 浅拷贝
f = copy.deepcopy(c) # 深拷贝
a.append([55])
print(a, c, e, f)
print('a的id是{}, b的id是{}'.format(id(a), id(b)))
print('c的id是{}, c[0]的id是{}, c[1]的id是{}'.format(id(c), id(c[0]), id(c[1])))
print('d的id是{}, d[0]的id是{}, d[1]的id是{}'.format(id(d), id(d[0]), id(d[1])))
print('e的id是{}, e[0]的id是{}, e[1]的id是{}'.format(id(e), id(e[0]), id(e[1])))
print('f的id是{}, f[0]的id是{}, f[1]的id是{}'.format(id(f), id(f[0]), id(f[1])))
# 浅拷贝:只拷贝变量c 赋值给e 里面的变量a,b 不进行拷贝
# 深拷贝: 拷贝变量c以及里面里面的a,b 赋值给 f

# 2、浅拷贝 与 深拷贝 元组
import copy
a = (11, 22)
b = (33, 44)
c = (a, b)
d = c
e = copy.copy(c) # 浅拷贝
f = copy.deepcopy(c) # 深拷贝
print('a的id是{}, b的id是{}'.format(id(a), id(b)))
print('c的id是{}, c[0]的id是{}, c[1]的id是{}'.format(id(c), id(c[0]), id(c[1])))
print('d的id是{}, d[0]的id是{}, d[1]的id是{}'.format(id(d), id(d[0]), id(d[1])))
print('e的id是{}, e[0]的id是{}, e[1]的id是{}'.format(id(e), id(e[0]), id(e[1])))
print('f的id是{}, f[0]的id是{}, f[1]的id是{}'.format(id(f), id(f[0]), id(f[1])))
# 因为元组是不可变类型,如果要是拷贝元组就是引用指向了


# 3、浅拷贝 与 深拷贝 元组里面包含列表
import copy
a = [11, 22]
b = [33, 44]
c = (a, b)
d = c
e = copy.copy(c) # 浅拷贝
f = copy.deepcopy(c) # 深拷贝
print('a的id是{}, b的id是{}'.format(id(a), id(b)))
print('c的id是{}, c[0]的id是{}, c[1]的id是{}'.format(id(c), id(c[0]), id(c[1])))
print('d的id是{}, d[0]的id是{}, d[1]的id是{}'.format(id(d), id(d[0]), id(d[1])))
print('e的id是{}, e[0]的id是{}, e[1]的id是{}'.format(id(e), id(e[0]), id(e[1])))
print('f的id是{}, f[0]的id是{}, f[1]的id是{}'.format(id(f), id(f[0]), id(f[1])))
# 拷贝拥有 不可变类型的数据为最顶层,那么浅拷贝就变成了引用指向,深拷贝还是深拷贝


# 4、浅拷贝 与 深拷贝 切片c[:]
a = [11, 22]
b = [33, 44]
c = [a, b]
e = c[:]
print('a的id是{}, b的id是{}'.format(id(a), id(b)))
print('c的id是{}, c[0]的id是{}, c[1]的id是{}'.format(id(c), id(c[0]), id(c[1])))
print('e的id是{}, e[0]的id是{}, e[1]的id是{}'.format(id(e), id(e[0]), id(e[1])))
# [:]的性质和浅拷贝一样

猜你喜欢

转载自www.cnblogs.com/fuyouqiang/p/11782561.html