码迷,mamicode.com
首页 > 编程语言 > 详细

python基础-深浅拷贝

时间:2019-08-24 09:51:18      阅读:87      评论:0      收藏:0      [点我收藏+]

标签:bmp   pytho   strong   技术   数据   inf   改变   mic   不可变   

一丶拷贝

如果l2是l1的拷贝对象,则l1内部的任何数据类型的元素变化,则l2内部的元素也会跟着改变,因为可变类型值变id不变。

阿攀大白话:

原对象任何元素变化,拷贝对象随之变化,这种现象为拷贝.用=来实现.

l1 = ['a', 'b', 'c', ['d', 'e', 'f']]
l2 = l1

l1.append('g')
print(l1)

[‘a‘, ‘b‘, ‘c‘, [‘d‘, ‘e‘, ‘f‘], ‘g‘]

print(l2)

[‘a‘, ‘b‘, ‘c‘, [‘d‘, ‘e‘, ‘f‘], ‘g‘]

二丶浅拷贝

如果l2是l1的浅拷贝对象,则l1内的不可变元素发生了改变,l2不变;如果l1内的可变元素发生了改变,则l2会跟着改变。

阿攀大白话:

原对象不可变类型元素变化拷贝对象不变化,但是可变类型类型变化,拷贝对象也随之改变,这种为浅拷贝.用copy.copy()实现

import copy

l1 = ['a', 'b', 'c', ['d', 'e', 'f']]
l2 = copy.copy(l1)

l1.append('g')

print(l1)

[‘a‘, ‘b‘, ‘c‘, [‘d‘, ‘e‘, ‘f‘], ‘g‘]

print(l2)

[‘a‘, ‘b‘, ‘c‘, [‘d‘, ‘e‘, ‘f‘]]

l1[3].append('g')

print(l1)

[‘a‘, ‘b‘, ‘c‘, [‘d‘, ‘e‘, ‘f‘, ‘g‘], ‘g‘]

print(l2)

[‘a‘, ‘b‘, ‘c‘, [‘d‘, ‘e‘, ‘f‘, ‘g‘]]

技术图片

三丶深拷贝

如果l2是l1的深拷贝对象,则l1内的不可变元素发生了改变,l2不变;如果l1内的可变元素发生了改变,l2也不会变,即l2永远不会因为l1的变化而变化。

阿攀大白话:

原对象无论什么类型的元素改变都不会影响拷贝类型的元素,这个就必然是一个深拷贝.用copy.deepcopy()实现

import copy

l1 = ['a', 'b', 'c', ['d', 'e', 'f']]
l2 = copy.deepcopy(l1)

l1.append('g')

print(l1)

[‘a‘, ‘b‘, ‘c‘, [‘d‘, ‘e‘, ‘f‘], ‘g‘]

print(l2)

[‘a‘, ‘b‘, ‘c‘, [‘d‘, ‘e‘, ‘f‘]]

l1[3].append('g')

print(l1)

[‘a‘, ‘b‘, ‘c‘, [‘d‘, ‘e‘, ‘f‘, ‘g‘], ‘g‘]

print(l2)

[‘a‘, ‘b‘, ‘c‘, [‘d‘, ‘e‘, ‘f‘]]

技术图片

python基础-深浅拷贝

标签:bmp   pytho   strong   技术   数据   inf   改变   mic   不可变   

原文地址:https://www.cnblogs.com/suren-apan/p/11403368.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!