时间:2021-05-22
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
列表赋值:
>>> a = [1, 2, 3]>>> b = a>>> print b[1, 2, 3]>>> a[0] = 0>>> print b[0, 2, 3]解释:[1, 2, 3]被视作一个对象,a,b均为这个对象的引用,因此,改变a[0],b也随之改变
如果希望b不改变,可以用到切片
>>> b = a[:]>>> a[0] = 0>>> print b[1, 2, 3]解释,切片a[:]会产生一个新的对象,占用一块新的内存,b指向这个新的内存区域,因此改变a所指向的对象的值,不会影响b
列表深拷贝和浅拷贝
浅拷贝
>>> import copy>>> a = [1, 2, 3, [5, 6]]>>> b = copy.copy(a)>>> print b[1, 2, 3, [5, 6]]>>> a[3].append('c')>>> print b[1, 2, 3, [5, 6, 'c']]深拷贝
>>> a = [1, 2, 3, [5, 6]]>>> b = copy.deepcopy(a)>>> a[3].append('c')>>> print b[1, 2, 3, [5, 6]]拷贝即是开辟一块新的内存空间,把被拷贝对象中的值复制过去。而浅拷贝并没有为子对象[5,6]开辟一块新的内存空间,而仅仅是实现对a中[5,6]的引用。所以改变a中[5,6]的值,b中的值也会发生变化。
深拷贝则是为子对象也开辟了一块新空间。所以改变a中[5, 6]的值,并不影响b
数组赋值不能用切片来达到相同的目的
>>> import numpy as np>>> a = np.array([1, 2 ,3])>>> b = a[:]>>> a[0] = 5>>> print a, b[5 2 3] [5 2 3]如上,虽然用切片,但不能达到修改a而不影响b的目的。说明a,b仍然指向同一块内存。
此时,只能用拷贝
>>> b = a.copy()>>> a[0] = 5>>> print a, b[5 2 3] [1 2 3]此时修改a不会影响到b。其中的原因以后进一步深究。
注意,列表的拷贝是copy.copy(obj)或copy.deepcopy(obj),数组的拷贝是obj.copy()
以上这篇对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
python深拷贝和浅拷贝的区别是: 1、直接赋值,默认浅拷贝传递对象的引用而已,原始列表改变,被赋值的b也会做相同的改变。 2、copy浅拷贝,没有拷贝子
本文实例讲述了JS赋值、浅拷贝和深拷贝(数组和对象的深浅拷贝)。分享给大家供大家参考,具体如下:深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型
Python基础教程之浅拷贝和深拷贝实例详解网上关于Python的深拷贝和浅拷贝的文章很多,这里对三种拷贝进行比较并附实例,大家可以参考下一般的复制#encod
本节内容深浅拷贝循环方式字典常用方法总结一、深浅拷贝列表、元组、字典(以及其他)对于列表、元组和字典而言,进行赋值(=)、浅拷贝(copy)、深拷贝(deepc
和很多语言一样,Python中也分为简单赋值、浅拷贝、深拷贝这几种“拷贝”方式。在学习过程中,一开始对浅拷贝理解很模糊。不过经过一系列的实验后,我发现对这三者的