python-深拷贝与浅拷贝
2018-03-09 11:25
225 查看
最近遇到这个深浅拷贝的问题,以前看过结果太久没用忘了,现在做个笔记。
浅拷贝:import copy ; a=[1,2] ; b=copy.copy(a)
深拷贝:import copy ; a=[1,2]; b=copy.deepcopy(a)
不可变对象:该对象所指向的内存中的值不能被改变,数值类型(int和float)、字符串str、元组tuple
可变对象:,该对象所指向的内存中的值可以被改变
对象的赋值:对象引用的传递,原始对象改变,被赋值的也会变。
a和b其实都指向内存中的同一对象[1,2]
例1:
输出是:
例2:
输出是:
浅拷贝:换小箱子(a[5]=10)、增加小箱子(a.append(5))、删除小箱子都不改变,只有修改小箱子内容时候(a[4].append(‘c’))会改变
浅拷贝:不会改变
Python -浅拷贝与深拷贝分析
对象的复制:a=[1,2] ; b=a浅拷贝:import copy ; a=[1,2] ; b=copy.copy(a)
深拷贝:import copy ; a=[1,2]; b=copy.deepcopy(a)
对象的赋值
这里先介绍下python中的可变对象和不可变对象不可变对象:该对象所指向的内存中的值不能被改变,数值类型(int和float)、字符串str、元组tuple
可变对象:,该对象所指向的内存中的值可以被改变
对象的赋值:对象引用的传递,原始对象改变,被赋值的也会变。
a=[1,2] b=a a.append(3) a[1]=6 print(a,b) 输出结果: [1, 6, 3] [1, 6, 3]
a和b其实都指向内存中的同一对象[1,2]
浅拷贝
浅拷贝是复制了父对象,子对象还是共用的,相当于一个大箱子a(父对象)里装了很多小箱子(子对象),浅拷贝是另外复制了一个大箱子b,里面的小箱子的内容没有复制,和a共用。因此在a里增加(删除)小箱子,b不会变,但是修改a小箱子中内容,b会改变。深拷贝
深拷贝:新的大箱子和小箱子,互不影响,a的任何改变不会影响b。例1:
import copy a = [1, 2, 3, 4, ['a', 'b'],[1,2]] #原始对象 b = a #赋值,传对象的引用 c = copy.copy(a) #对象拷贝,浅拷贝 d = copy.deepcopy(a) #对象拷贝,深拷贝 a[5]=10 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'], 10, 5]) ('b = ', [1, 2, 3, 4, ['a', 'b', 'c'], 10, 5]) ('c = ', [1, 2, 3, 4, ['a', 'b', 'c'], [1,2]]) ('d = ', [1, 2, 3, 4, ['a', 'b'], [1,2])
例2:
import copy a={'a':1,'b':[1,2]} b=copy.copy(a) a['a']=2 a['b'][1]=6 print(a,b)
输出是:
{'a': 2, 'b': [1, 6]} {'a': 1, 'b': [1, 6]}
浅拷贝:换小箱子(a[5]=10)、增加小箱子(a.append(5))、删除小箱子都不改变,只有修改小箱子内容时候(a[4].append(‘c’))会改变
浅拷贝:不会改变
相关文章推荐
- Python中复制,浅拷贝,深拷贝的区别详解
- Python拷贝(深拷贝deepcopy与浅拷贝copy)
- Python pandas.DataFrame在用ix, loc, iloc 索引的时候就相当于拷贝copy了一个对象
- Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
- 【Python】Python中的深浅拷贝
- Python中浅拷贝copy与深拷贝deepcopy的简单理解
- 对python append 与浅拷贝的实例讲解
- 004_001 Python 对象拷贝
- Python 浅拷贝 深拷贝 及引用机制
- 谈谈Python中对象拷贝
- python 的拷贝、深度拷贝及内存管理
- Python 中的深浅拷贝
- Python开发【第二章】:深浅拷贝剖析
- Python Cookbook 4.1 复制(拷贝)对象(浅复制和深复制)
- python拷贝
- python3 开发面试题(字典和拷贝)5.30
- python 浅拷贝与深拷贝
- python---深浅拷贝
- python面试总结(三)拷贝与通信
- Python3 - 对内存的使用--深拷贝,浅拷贝