#!/usr/bin/env python
# -*- coding: utf-8 -*-
import copy
'''
关键:
1 深拷贝:拷贝了对象所有元素,包含嵌套元素。是与原来对象无关的全新对象。无关性。
2 浅拷贝: 创建新对象,但新对象中各个元素是原对象对应各个元素的引用。
3 举例如下:
a = [1,[2,3]]
c = copy.copy(a)
那么a与c虽然是两个不同对象(id(a) != id(c)),但是a与c中各个元素是相同的(例如id(a[0]) = id(c[0]) , id[a[1]]=id(c[1]))
那么就是说:
例1: a.append(5)会导致a变成[1,[2,3],5],但由于a与c的地址不同,c并不会有变化。
例 2: a[1].append(6)会导致a变成[1,[2,3,6]],同样也会使得b变成[1,[2,3,6]],因为a[1] 与 b[1]地址相同,a[1]和b[1]实际是同一个对象。
总结:
深浅拷贝都是创建新的对象。但深拷贝包含了嵌套拷贝,拷贝后的对象与原对象无关。浅拷贝中的每个元素和原对象每个元素相同,如果对元素操作,会使得浅拷贝对应元素发生变化。
参考:
[1] https://www.cnblogs.com/xueli/p/4952063.html
[2] https://www.cnblogs.com/huangbiquan/p/7795152.html
[3] https://blog.csdn.net/w494675608/article/details/82114798
'''
def useCopy():
a = [1, [2,3]]
b = copy.copy(a)
c = copy.deepcopy(a)
assert (id(a) != id(b))
for i, value in enumerate(a):
assert (id(a[i] == id(b[i])))
a.append(5)
assert b == [1, [2,3]]
assert c == [1, [2,3]]
a[1].append(6)
assert b == [1, [2,3,6]]
assert c == [1, [2,3]]
def process():
useCopy()
if __name__ == "__main__":
process()
python 64式: 第10式、深浅拷贝
猜你喜欢
转载自blog.csdn.net/qingyuanluofeng/article/details/83279769
今日推荐
周排行