0
点赞
收藏
分享

微信扫一扫

python numpy 深拷贝 浅拷贝总结

大南瓜鸭 2022-02-26 阅读 106

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]]

总结: 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。 深拷贝 拷贝对象及其子对象

举报

相关推荐

0 条评论