前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++, Java, Python 中的浅复制

C++, Java, Python 中的浅复制

作者头像
double
发布2019-10-22 23:08:21
5080
发布2019-10-22 23:08:21
举报
文章被收录于专栏:算法channel算法channel

01

对象的浅复制,深复制问题,在面试中经常被问到,不管是 C++, Java, 还是 Python,一般都会问这个问题。今天以Python为例来说明浅复制问题。

02

从 List 的 copy() 说起

先从简单说起,如下:

monkeys = ['jone','yone','mary']

wukongs = monkeys.copy()

print(wukongs)

>>>['jone', 'yone', 'mary']

我们成功克隆出 wukongs.

到这里,还只是复制,完全看不出什么是浅复制。

03

接下来,就看浅复制

我们向 monkeys群体中,添加一组动物,如下,然后再次复制 monkeys .

monkeys.append(['nuzha','honghaier']) print(monkeys) #>>>['jone', 'yone', 'mary', ['nuzha', 'honghaier']] print(wukongs) #>>>['jone', 'yone', 'mary'] #再次复制mokeys给 wukongs wukongs = monkeys.copy() print(wukongs) #>>>

此时打印 wukongs,可以看到:

代码语言:javascript
复制
['jone', 'yone', 'mary', ['nuzha', 'honghaier']]

这一点也不惊讶,接下来,就是见证奇迹的时刻:

wukongs[-1].append('houzi') print(wukongs) print(monkeys)

当我们从 wukongs的最后一个元素:它也是一个 list,添加一个动物: houzi 时,我们只向 wukongs 添加了一个动物,此时打印它,不惊讶,但是打印 monkeys ,发现它也有了 houzi

代码语言:javascript
复制
['jone', 'yone', 'mary', ['nuzha', 'honghaier', 'houzi']]['jone', 'yone', 'mary', ['nuzha', 'honghaier', 'houzi']]

这就是浅复制,当一个 list 里的某个元素是个对象,比如 list, tuple, dict 及自建类,如果执行copy(),这个元素只是指针值的复制,不会递归复制它的内存。因此,将会引起上面的现象,因为都是同一个内存地址的两次引用。

---文章摘自合作公号《Python每天3分钟》

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员郭震zhenguo 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档