python 复制 浅copy 深copy 的区别

1.浅copy:   外层添加元素时, 浅拷贝c不会随原列表a变化而变化;内层list添加元素时,浅拷贝c才会变化。
2.深copy:   无论原列表a如何变化,深拷贝d都保持不变。
3.赋值:    赋值对象随着原列表一起变化

   深拷贝:只有一种形式,copy模块中的deepcopy函数。     和浅拷贝对应,深拷贝拷贝了对象的所有元素,包括多层嵌套的元素。     深拷贝出来的对象是一个全新的对象,不再与原来的对象有任何关联。

import copy
a = [1,2,3,4,5,[‘a‘,‘b‘],6]
b = a
c =copy.copy(a)
d = copy.deepcopy(a)

a.append(7)

print(a)    #新增一个7
print(b)    #新增一个7
print(c)    #浅copy 不变
print(d)    #深copy不变
print(‘~~~~~~‘)
a[5].append(‘c‘)
print(a)
print(b)
print(c)
print(d)

/usr/local/bin/python3.7 "/code/赋值 浅copy 深copy.py"
[1, 2, 3, 4, 5, [‘a‘, ‘b‘], 6, 7]
[1, 2, 3, 4, 5, [‘a‘, ‘b‘], 6, 7]
[1, 2, 3, 4, 5, [‘a‘, ‘b‘], 6]
[1, 2, 3, 4, 5, [‘a‘, ‘b‘], 6]
~~~~~~
[1, 2, 3, 4, 5, [‘a‘, ‘b‘, ‘c‘], 6, 7]
[1, 2, 3, 4, 5, [‘a‘, ‘b‘, ‘c‘], 6, 7]
[1, 2, 3, 4, 5, [‘a‘, ‘b‘, ‘c‘], 6]
[1, 2, 3, 4, 5, [‘a‘, ‘b‘], 6]

Process finished with exit code 0

原文地址:https://www.cnblogs.com/666sss/p/11626042.html

时间: 2024-08-04 15:17:00

python 复制 浅copy 深copy 的区别的相关文章

python基础之赋值/深copy/浅copy

首先,不管是赋值还是深浅copy,都是针对那些可能会产生变化的值进行区分的,也就是对于数字,字符串来说,区分赋值,深浅copy是毫无意义的. 那么,让我们来对那些可变的像list set dict tuple……来进行探讨. 赋值: 有两种修改n的方法: 1  直接对n赋值 >>> n=[1,2] >>> g=n >>> id(n) 140529062430792 >>> id(g) 140529062430792 >>&

python3 完全理解赋值,浅copy,深copy 通过地址详细理解~

额...老规矩,先来一天NLP再说,也没几条了. 十,在任何一个系统里,最灵活的部分是最能影响大局的部分 灵活便是有一个以上的选择,选择便是能力,因此最灵活的人便是最有能力的人. 灵活来自减少只相信自己的一套信念,价值和规条,而多凭借观察运用环境所提供的其他条件. 灵活是使事情更快有效的的重要因素,因此,亦是人生成功快乐的重要因素. 灵活亦是自信的表现,自信越不足,坚持某个模式的态度会越强硬. 容许不同的意见和可能性,便是灵活. 在一个群体中,固执使人紧张,灵活使人放松. 灵活不代表放弃自己的立

python中的深copy和浅copy

bytes Python bytes/str bytes 在Python3中作为一种单独的数据类型,不能拼接,不能拼接,不能拼接 >>> '€20'.encode('utf-8') b'\xe2\x82\xac20' >>> b'\xe2\x82\xac20'.decode('utf-8') '€20' 解码 >>> b'\xa420'.decode('windows-1255') '?20' 深copy和浅copy 深copy新建一个对象重新分配内存

浅深copy

前言 列表中的每个元素在内存中都是相互独立的,有自己的唯一标识符,可以通过 id() 函数来查看元素在内存中的唯一标识符. 浅深copy在列表数据量比较大的情况下,不建议使用,比较消耗内存资源. 浅深copy就是在内存中把一个列表复制一份,占用了两份内存空间: 浅copy 元素值未修改 两个列表的唯一标识符不一样,元素的唯一标识符是一样的(两个列表共享一份元素值). 元素值修改后 元素的唯一标识符改变,但是有子列表的情况下,子列表元素唯一标识符不改变. 总结:并非完全独立的两个列表. 深copy

python深copy与浅copy的区别

首先先看一段代码 import copy a = [1, 2, 3, [4]] b = a c = a.copy() d = copy.deepcopy(a) e = copy.copy(a) a.append(4) a[3].append(5) print('a值为 {} 地址为 {}'.format(a, id(a))) print('b值为 {} 地址为 {}'.format(b, id(b))) print('c值为 {} 地址为 {}'.format(c, id(c))) print(

python学习笔记-(六)深copy&浅copy

在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用. 1. 赋值 赋值其实只是传递对象引用,引用对象id是一样的.原始列表改变,被赋值的b也会做相同的改变. 1 2 3 4 5 6 7 8 9 10 11 12 13 >>> alist = [1,2,3,["a","b"]] >>> b = alist >>> p

理解一下python中的浅copy和深copy

最近在学习过程中,了解了一下,浅copy和深copy,做个记录. 所谓浅拷贝就是对引用的拷贝,所谓深拷贝就是对对象的资源的拷贝. 首先,对赋值操作我们要有以下认识: 赋值是将一个对象的地址赋值给一个变量,让变量指向该地址( 旧瓶装旧酒 ). 修改不可变对象(str.tuple)需要开辟新的空间 修改可变对象(list等)不需要开辟新的空间 浅拷贝仅仅复制了容器中元素的地址 >>> user = ['tom', ['age', 20]] >>> user_new = us

关于iOS的深copy和浅copy 以及copy 和 strong 的区别

之前都是靠记忆来维持copy和strong  也有问过我 .  我自己说起来才感觉都说不很清楚 通过简单都代码来验证一下 . 有时候花点时间验证一下才能让思路更加清晰 NSMutableString * mustr = [NSMutableString stringWithString:@"good"]; self.str = mustr; self.fuzhiString = mustr; NSLog(@"self.str is (%@) ==== str,self.fuz

Python浅拷贝copy()与深拷贝deepcopy()区别

其实呢,浅拷贝copy()与深拷贝deepcopy()之间的区分必须要涉及到python对于数据的存储方式. 首先直接上结论: -–我们寻常意义的复制就是深复制,即将被复制对象完全再复制一遍作为独立的新个体单独存在.所以改变原有被复制对象不会对已经复制出来的新对象产生影响. -–而浅复制并不会产生一个独立的对象单独存在,他只是将原有的数据块打上一个新标签,所以当其中一个标签被改变的时候,数据块就会发生变化,另一个标签也会随之改变.这就和我们寻常意义上的复制有所不同了. 对于简单的 object,