栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么我的函数会覆盖作为参数传递的列表?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么我的函数会覆盖作为参数传递的列表?

字符串,整数,元组是不可变的python类型,因此,当您执行更改这些类型之一的操作时,每次都会在内存中有效地创建新的对应对象。(或者,如果尝试就地进行更改,则会收到错误消息。)

列表和字典是可变的python类型,因此当您执行更改这些类型之一的操作时,对象保持不变,但是对象的一部分(即列表元素)被更改。

因此,当您想更改列表但又想保留原样时,必须自己复制它。重要的是,有两种复制类型- 浅复制深复制

浅复制可以这样进行:

list_b = list_a[:] #using slice syntax#orlist_b = list(list_a) #instantiating a new list from iterating over the old one#orimport copylist_b = copy.copy(list_a) #using copy module

深度复制通过以下方式完成:

import copylist_b = copy.deepcopy(list_a)

深拷贝和浅拷贝之间的区别是…

进行浅表复制时,如果可变对象包含其他可变对象,则仅复制顶部的对象。也就是说,如果一个列表包含其他列表,如果复制了顶部列表,然后在副本中更改了内部列表,则实际上,内部列表将在副本和原始列表中都进行更改,因为它是引用的内存中的同一对象在两个不同的列表中。基本上,浅表复制会使用与原始对象中存储的相同引用创建一个新对象。

在进行深层复制时,如果可变对象包含其他可变对象,那么内部可变对象也会被复制。即,如前面的示例所示,如果您在副本中更改内部列表,则仅在副本中更改,并且原始列表不受影响。如此深层复制会复制所有内容,并在内存中为要复制的对象(而不仅仅是引用)中的所有内容创建新结构。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/517198.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号