python numpy 深拷贝 浅拷贝总结
#切片方法和.copy()方法在没有其他对象情况下,和深拷贝一样
print('1.切片方法')
a = [1,2,3]
b = a[:]
print('a:',a)
print('b:',b)
b[0] = 0
print('切片改变b的第1个位置上的元素之后———')
print('a:',a)
print('b:',b)
print('\n')
print('2.copy()方法')
a = [1, 2, 3]
b = a.copy()
print('a:',a)
print('b:',b)
b[0] = 0
print('.copy()改变b的第1个位置上的元素之后———')
print('a:',a)
print('b:',b)
1.切片方法在没有其他对象情况下,和深拷贝一样
a: [1, 2, 3]
b: [1, 2, 3]
切片改变b的第1个位置上的元素之后———
a: [1, 2, 3]
b: [0, 2, 3]
2.copy()在没有其他对象时,和深拷贝一样
a: [1, 2, 3]
b: [1, 2, 3]
.copy()改变b的第1个位置上的元素之后———
a: [1, 2, 3]
b: [0, 2, 3]
#有子对象的切片方法和.copy()方法
print('1.有子对象的切片方法')
a = [1,3,[2,3]]
b = a[:]
print('a:',a)
print('b:',b)
b[2][0] =99
b[1] = 2
print('切片改变b的[2][0]位置和[1]位置上的元素之后———')
print('a:',a)
print('b:',b)
print('\n')
print('2.有子对象的.copy()方法')
c = [1,3,[2,3]]
d = c.copy()
print('c:',c)
print('d:',d)
d[2][0] = 999
d[1] = 2
print('.copy()改变d的[2][0]位置和[1]位置上的元素之后———')
print('c:',c)
print('d:',d)
1.有子对象的切片操作
a: [1, 3, [2, 3]]
b: [1, 3, [2, 3]]
切片改变b的[2][0]位置和[1]位置上的元素之后———
a: [1, 3, [99, 3]]
b: [1, 2, [99, 3]]
2.有子对象的.copy()操作
c: [1, 3, [2, 3]]
d: [1, 3, [2, 3]]
.copy()改变d的[2][0]位置和[1]位置上的元素之后———
c: [1, 3, [999, 3]]
d: [1, 2, [999, 3]]
#深拷贝
print('深拷贝')
import copy
a = [1,2,3]
b =copy.deepcopy(a)
print('a:',a)
print('b:',b)
b[0] = 0
print('深拷贝改变b的[0]位置上的元素之后———')
print('a:',a)
print('b:',b)
print('\n')
c = [1,2,[3,4]]
d = copy.deepcopy(c)
print('c:',c)
print('d:',d)
d[0] = 0
d[2][1] = 2
print('深拷贝改变d的[2][0]位置和[0]位置上的元素之后———')
print('c:',c)
print('d:',d)
深拷贝
a: [1, 2, 3]
b: [1, 2, 3]
深拷贝改变b的[0]位置上的元素之后———
a: [1, 2, 3]
b: [0, 2, 3]
c: [1, 2, [3, 4]]
d: [1, 2, [3, 4]]
深拷贝改变d的[2][0]位置和[0]位置上的元素之后———
c: [1, 2, [3, 4]]
d: [0, 2, [3, 2]]
总结: 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。 深拷贝 拷贝对象及其子对象