首页 > 编程语言 > 详细

python中的"="、"np.copy()"、"copy.deepcopy()"

时间:2021-01-11 20:45:19      阅读:56      评论:0      收藏:0      [点我收藏+]

我们直接给个例子看一下

 1 import numpy as np
 2 import copy
 3 
 4 a = np.array([1, ‘m‘, [2, 3, 4]])
 5 b = a
 6 c = np.copy(a)  # 等价于c = a.copy()
 7 d = copy.deepcopy(a)
 8 
 9 print(id(a), id(b), id(c), id(d))
10 print("a: ", a)
11 print("b: ", b)
12 print("c: ", c)
13 print("d: ", d)

输出:

2469932198128 2469932198128 2469960733200 2469960733840
a:  [1 ‘m‘ list([2, 3, 4])]
b:  [1 ‘m‘ list([2, 3, 4])]
c:  [1 ‘m‘ list([2, 3, 4])]
d:  [1 ‘m‘ list([2, 3, 4])]

结论:对于赋值“=”操作来说,并不改变数据的地址

下面我们改变一下c试试看:

c[0] = 2
print("a: ", a)
print("b: ", b)
print("c: ", c)
print("d: ", d)

输出:

a:  [1 ‘m‘ list([2, 3, 4])]
b:  [1 ‘m‘ list([2, 3, 4])]
c:  [2 ‘m‘ list([2, 3, 4])]
d:  [1 ‘m‘ list([2, 3, 4])]

结论:改变了c的第一个元素,并不会改变a、b和d

现在我们改变c中的那个list试试看:

1 c[2][0] = 10
2 print("a: ", a)
3 print("b: ", b)
4 print("c: ", c)
5 print("d: ", d)

输出:

a:  [1 ‘m‘ list([10, 3, 4])]
b:  [1 ‘m‘ list([10, 3, 4])]
c:  [2 ‘m‘ list([10, 3, 4])]
d:  [1 ‘m‘ list([2, 3, 4])]

结论:发现改变c中list内的元素之后,a和b会跟着改变,但d不会改变

下面我们改变d试试看

1 d[2][0] = 20
2 print("a: ", a)
3 print("b: ", b)
4 print("c: ", c)
5 print("d: ", d)

输出:

a:  [1 ‘m‘ list([10, 3, 4])]
b:  [1 ‘m‘ list([10, 3, 4])]
c:  [2 ‘m‘ list([10, 3, 4])]
d:  [1 ‘m‘ list([20, 3, 4])]

结论,d的改变并不会改变a、b和c的值

综上所述:

“=”:赋值前后数据的内存地址不发生变化,改变一个,另一个会随着一起发生改变

“np.copy()”:是浅复制,不会复制数组中的对象元素。因此需要谨慎使用

“copu.deepcopy()”:是深复制,不论怎么变化d,a的值不会发生变化。

 

 

如有错误,请指出!

 

 





python中的"="、"np.copy()"、"copy.deepcopy()"

原文:https://www.cnblogs.com/seekingmzr/p/14263771.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!