`
ihuashao
  • 浏览: 4552979 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

python 引用,浅copy和深拷贝

阅读更多

l = [1,2,3,4]

g = l

g[-1] = 3

上面这个方法是引用复制,因为g和l是同一个东东,输出结果是 g=[1,2,3,3] l =[1,2,3,3]

如果想复制所有的生成一个新的list,那么使用下面的方法

g = [data for data in l]

这样就全部的值都copy 过来

现在你再g[-1] = 5,g和l 的值肯定不一样。

但是如果l=[1,[1,2]] 在使用同样的方法 g = [data for data in l],然后g[1][-1].append(3)

你会发现l中的值和g中的值还是一样的。原因还是由于copy了引用,而没有copy真正的值。

所以要解决的话,使用笨的方法是:

g = []

g.append(l[0])

g.append([data for data in l[1]])

更好的方式是使用list中的extend,

例如

a = [1,2]

b = []

b.extend(a)

a = []

print(b)

可以看到b还是有a原来的值。

分享到:
评论

相关推荐

    python浅拷贝、深拷贝

    在Python中,浅拷贝(shallow copy)和深拷贝(deep copy)是用于创建对象副本的两种常见方式。它们可以应用于不同类型的对象,如列表、字典、集合等。下面是对浅拷贝和深拷贝的描述: 浅拷贝:浅拷贝是创建一个新...

    Python 深拷贝和浅拷贝详解

    1、Python 深拷贝和浅拷贝概念理解 浅拷贝,指的是重新分配一块内存,创建一个新的对象,但里面的元素是原对象中各个子对象的引用。 深拷贝,是指重新分配一块内存,创建一个新的对象,并且将原对象中的元素,以...

    Python中字典的浅拷贝与深拷贝用法实例分析

    本文实例讲述了Python中字典的浅拷贝与深拷贝用法。分享给大家供大家参考,具体如下: 最近发现的一个很值得记录的东西就是python字典的浅拷贝问题 首先,明确一下什么是浅拷贝,什么是深拷贝: 简单的来说就是,在...

    Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)

    import copya = [1, 2, 3, 4, [‘a’, ‘b’]] #原始对象b = a #赋值,传对象的引用c = copy.copy(a) #对象拷贝,浅拷贝d = copy.deepcopy(a) #对象拷贝,深拷贝a.append(5) #修改对象aa[4]....

    对于Python深浅拷贝的理解

    通过调用copy包里的deepcopy方法来深拷贝,其实就是在内存区在分配保存了和a相同的数据,用c来指向它,和a的内存地址不同。怎么验证就是我说的这种情况的呢?用下图来说明吧: 可以看出向a 添加一个元素,通过浅...

    Python中浅拷贝copy与深拷贝deepcopy的简单理解

    以下是个人对Python深浅拷贝的通俗解释,易于绕开复杂的Python数据结构存储来进行理解! 高级语言中变量是对内存及其地址的抽象,... copy.copy(object),拷贝的是内嵌套结构的地址引用,当内嵌套结构发生变化时,

    学习Python一年,这次终于弄懂了浅拷贝和深拷贝

    话说,网上已经有很多关于Python浅拷贝和深拷贝的文章了,不过好多文章看起来还是决定似懂非懂,所以决定用自己的理解来写出这样一篇文章。 当别人一提起Python中的复制操作,你会不会立马站起来说:“我会”,于是...

    python的copy方法.docx

    copy方法有两种方式:浅拷贝和深拷贝。浅拷贝只复制对象的一层,而深拷贝则会递归地复制对象的所有层。下面我们来看一下这两种方式的具体实现。 浅拷贝: 浅拷贝可以使用对象的copy方法来实现。例如,我们有一个...

    Python 赋值,浅拷贝,深拷贝

    深拷贝(deepcopy): copy模块的deepcopy方法,完全拷贝了父对象及其子对象。 1 基础概念 在Python里,一切皆对象,完全的面向对象。 1、Python为动态解释性语言,在赋值操作时,并不需要像静态编译类型语言C++或Java...

    Python直接赋值、浅拷贝与深度拷贝实例分析

    深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。 字典浅拷贝实例 实例 >>>a = {1: [1,2,3]} >>> b = a.copy() >>> a, b ({1: [1, 2, 3]}, {1: [1, 2, 3]}) >>> a[1].append(4) >>> a...

    详解python深浅拷贝区别

    深拷贝:外围和内部元素都进行了拷贝对象本身,而不是引用。也就是,把对象复制一遍,并且该对象中引用的其他对象我也复制。 深浅拷贝的作用 1,减少内存的使用 2,以后在做数据的清洗、修改或者入库的时候,对原...

    Python直接赋值及深浅拷贝原理详解

    定义 直接赋值:就是对象的引用(别名) 浅拷贝(copy):拷贝父对象,不拷贝对象内部的子对象 深拷贝(deepcopy):copy模块的...以下是直接赋值、浅拷贝和深拷贝之对比 import copy a = [1, 2, 3, 4, ['a', 'b']]

    Python中的复制操作及copy模块中的浅拷贝与深拷贝方法

    我改变了b的第一个元素的值,但是a的值也改变了,这是因为python中的=是引用.a和b指向的是相同的列表,所以改变列表会出现以上的结果. 解决方法是切片操作 a = [1, 2, 3] b = a[:] b[0] = 4 # [1, 2, 3] # [4, 2, 3...

    python 直接赋值和copy的区别详解

    直接赋值和copy的区别: 直接赋值:其实就是对象的引用(别名)。...dict3 = dict1.copy() # 深拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用 # 修改 data 数据 dict1['user']='root' dict1['n

    最新最新Python面试题及答案.docx

    (赋值,浅拷贝,深拷贝的区别) 答:赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。 浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用(如果用引用的方式修改...

    python读取和保存图片5种方法对比

    python中对象之间的赋值是按引用传递的,如果需要拷贝对象,需要用到标准库中的copy模块 方法一:利用 PIL 中的 Image 函数 这个函数读取出来不是 array 格式,这时候需要用 np.asarray(im) 或者 np.array()函数 ...

    python基础系列教程-Python3.x标准模块库目录.docx

    13.collections:容器数据类型 14.collections.abc:容器虚基类 15.heapq:堆队列算法 16.bisect:数组二分算法 17.array:数值数组 18.weakref:弱引用 19.types:内置类型的动态创建与命名 20.copy:浅拷贝与深拷贝 ...

    举例区分Python中的浅复制与深复制

    该模块非常简单,只提供了两个主要的方法: copy.copy 与 copy.deepcopy ,分别表示浅复制与深复制。什么是浅复制,什么是深复制,网上有一卡车一卡车的资料,这里不作详细介绍。复制操作只对复合对象有效。用简单的...

    百度地图毕业设计源码-python_knowledge:包含基础篇、进阶篇、练习篇、爬虫篇、正则篇、Flask篇、Django篇。持续迭代中

    2、深拷贝和浅拷贝之间的区别是什么? 答:深拷贝就是将一个对象拷贝到另一个对象中,这意味着如果你对一个对象的拷贝做出改变时,不会影响原对象。在Python中,我们使用函数deepcopy()执行深拷贝,导入模块copy,...

    百度地图毕业设计源码-interview-question:面试题

    #对象拷贝,深拷贝 a.append(5) #修改对象a a[4].append('c') #修改对象a中的['a', 'b']数组对象 print 'a = ', a print 'b = ', b print 'c = ', c print 'd = ', d 输出结果: a = [1, 2, 3, 4, ['a', 'b', 'c'], ...

Global site tag (gtag.js) - Google Analytics