python之深浅拷贝

上一篇 / 下一篇  2016-10-23 15:50:12 / 个人分类:python

python对象赋值
b=a
浅拷贝   只拷贝父对象,往原始对象中添加元素或删除元素,浅拷贝对象都不会更改,如果是改变原有对象可变元素的值的话,浅拷贝对象的值会跟着原始对象改变
import copy
b=copy.copy(a)
深拷贝  拷贝父对象及子对象  无论原始对象改变什么,深拷贝对象都不会变化
from copy import deepcopy    
c=deepcopy(a)

>>> z=[1,2,3,4,[2,"r"]]
>>> a=z
>>> b=copy.copy(z)
>>> c=deepcopy(z)
>>> z
[1, 2, 3, 4, [2, 'r']]
>>> a
[1, 2, 3, 4, [2, 'r']]
>>> b
[1, 2, 3, 4, [2, 'r']]
>>> c
[1, 2, 3, 4, [2, 'r']]
改变不可变元素的值,深浅拷贝都不变
>>> z[3]="d"
>>> z
[1, 2, 5, 'd', [2, 'r']]
>>> a
[1, 2, 5, 'd', [2, 'r']]
>>> b
[1, 2, 3, 4, [2, 'r']]
>>> c
[1, 2, 3, 4, [2, 'r']]

追加原始对象的值,都不改变
>>> z.append("we")
>>> z
[1, 2, 5, 'd', [2, 'r'], 'we']
>>> a
[1, 2, 5, 'd', [2, 'r'], 'we']
>>> b
[1, 2, 3, 4, [2, 'r']]
>>> c
[1, 2, 3, 4, [2, 'r']]

更改对象可变元素的值,浅拷贝变化,深拷贝不变
>>> z[4].append("e")
>>> z
[1, 2, 5, 'd', [2, 'r', 'e'], 'we']
>>> a
[1, 2, 5, 'd', [2, 'r', 'e'], 'we']
>>> b
[1, 2, 3, 4, [2, 'r', 'e']]
>>> c
[1, 2, 3, 4, [2, 'r']]

TAG: Python python

 

评分:0

我来说两句

我的栏目

日历

« 2024-05-02  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 14783
  • 日志数: 20
  • 建立时间: 2016-10-19
  • 更新时间: 2018-01-27

RSS订阅

Open Toolbar