1
Jakarta 2021-05-09 21:09:16 +08:00
python 深拷贝 浅拷贝
|
2
mcoo1997 2021-05-09 21:11:43 +08:00 via Android
import copy
copy.deepcopy(cc) |
3
jmc891205 2021-05-09 21:14:04 +08:00
cc = dict(dd)
|
4
di94sh 2021-05-09 21:15:59 +08:00 via iPhone 1
python 基础知识 可变对象与不可变对象
|
5
mostkia 2021-05-09 21:18:04 +08:00
一般的赋值操作,只是拷贝了目标对象的一个内存地址的引用,类似安装的程序,你只拷贝了一个快捷方式,程序被删了或改变了,所有的快捷方式都会跟着失效变动,js 语言也有这类问题,尝试用深拷贝。
|
6
ch2 2021-05-09 22:06:21 +08:00
c#+js+python 都是这样
|
7
xiri 2021-05-09 22:16:50 +08:00 1
改成 cc=dd.copy() 就行了,这是很基础的问题,深浅拷贝
|
8
meteordragon OP 感谢各位前辈,之前真没注意过这个问题
|
9
jotpot 2021-05-09 23:00:22 +08:00
确实是小白。所有的编程语言都有引用和 clone 的问题
|
10
nightwitch 2021-05-09 23:02:17 +08:00
引用语义和值语义的差别,不同语言有不同的倾向。
|
11
muzuiget 2021-05-10 01:17:36 +08:00
引用问题,建议把基础部分重看一次。
|
12
littlewey 2021-05-10 01:48:17 +08:00 via iPhone
看一下
id(cc) id(dd) |
13
wd 2021-05-10 05:44:01 +08:00 via iPhone
感觉隔一段时间就有人来这里说说这个问题...
|
14
HashV2 2021-05-10 09:06:58 +08:00
我一周看到三四次这个问题了,在不同的语言节点。。
|
15
no1xsyzy 2021-05-10 09:22:49 +08:00
应该不算深浅拷贝问题,而是拷贝与引用的问题。
但我觉得你的需求更大可能应该写成 cc = {**dd, "c":"3"} 展开式浅拷贝同时进行修改是非常好用的糖 @jotpot 略暴言。C 语言没有引用与 clone 的问题,都是 clone,只不过 clone 的可能是指针(地址)。你若是非要传参传 struct 而不是 struct* 也给你全量拷贝了(通常没人这么用罢了)。Pascal 类似。 函数式语言也不会遇到这个问题,因为全都不可变了,就没引用和 clone 的差异了。 |
16
Kilerd 2021-05-10 09:29:13 +08:00
这是 python 有史以来的 bug,建议换一门语言以避免同样的 bug
|
17
RRRoger 2021-05-10 09:42:10 +08:00
百度谷歌随便一搜就有解决方案
|
18
charlie21 2021-05-10 15:59:46 +08:00 via iPhone
|
19
ddzzhen 2021-05-10 21:08:17 +08:00 via Android
赋值操作是链接,占用内存不增加
|
20
xiaoxinshiwo 2021-05-11 16:05:33 +08:00
[捂眼睛]
|
21
IgniteWhite 2021-07-17 08:31:27 +08:00
|