
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/span> di94sh 2021-05-09 21:15:59 +08:00 via iPhone 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 改成 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 [捂眼睛] |