浅copy与深copy

浅copy

实现浅copy的几种方式:

1 import copy
2
3 name1=[‘Liyunlong‘,[‘alex‘,‘Tony‘],‘Xuliucheng‘]
4
5 name2=copy.copy(name1)
6 name2=name1[:]
7 name2=name1.copy()

实现深copy的方式:

1 import copy
2
3 name1=[‘Liyunlong‘,[‘alex‘,‘Tony‘],‘Xuliucheng‘]
4
5 name2=copy.deepcopy(names) #注意copy.copy()依旧是浅copy

区别:

浅copy:复制列表是只是被复制列表的引用,只copy第一层,第二层copy内存地址

深copy:独立复制一份,复制列表与被复制列表无关

例如:

浅copy之后更改列表第一层和第二层:

1 import copy
2
3 name1=[‘Liyunlong‘,[‘alex‘,‘Tony‘],‘Xuliucheng‘]
4
5 name2=copy.copy(name1)
6 name1[0]=‘Zhaogang‘
7 name2[1][0]=‘James Tao‘
8 print(name1)
9 print(name2)

浅copy结果:

深copy之后更改列表第一层和第二层:

1 import copy
2
3 name1=[‘Liyunlong‘,[‘alex‘,‘Tony‘],‘Xuliucheng‘]
4
5 name2=copy.deepcopy(name1)
6 name1[0]=‘Zhaogang‘
7 name2[1][0]=‘James Tao‘
8 print(name1)
9 print(name2)

深copy结果:

另外,使用等号复制列表相当于copy了前列表的全部地址:

1 name1=[‘Liyunlong‘,[‘alex‘,‘Tony‘],‘Xuliucheng‘]
2
3 name2=name1
4 name1[0]=‘Zhaogang‘
5 name2[1][0]=‘James Tao‘
6 print(name1)
7 print(name2)

结果为:

原文地址:https://www.cnblogs.com/BIT-taozhen/p/9744510.html

时间: 2024-11-09 09:34:41

浅copy与深copy的相关文章

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

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

浅copy 与 深copy

1 import copy 2 names = ["zhangyang", 'guyun', 'xiangpeng', ['jack','tom'], 'xuliangchen'] 3 names2 = names.copy() #浅copy,复制后改变原列表,copy后的列表不发生改变 4 5 6 names[2] = "祥鹏" 7 names.append("zhangshan") 8 9 print(names) 10 print(name

深浅copy,何为深浅copy,深copy和浅copy两者有何不同

copy,拷贝,顾名思义,自然是把东西复制过来,呈现在眼前的是一样的,例如: a = [1,2,3,4,5] b = a b.append(6) print(a,b) 输出: [1, 2, 3, 4, 5, 6] [1, 2, 3, 4, 5, 6] 很明显,a和b的值是一样的.因为对于赋值运算来讲,a与b指向的是同一内存地址,所以他们完全是一样的 浅copy: a = [1,2,3,4,[5]] b = copy.copy(a) b[4].append(6) print(a) print(b)

浅copy与深copy举例

 例1: 1 #!/usr/bin/env python 2 import copy 3 d1 = {'x':1,'y':2,'z':[3,4.5]} 4 d2 = d1 5 d3 = d1.copy() 6 d4 = copy.copy(d1) 7 d5 = copy.deepcopy(d1) 8 d1['x'] = 'm' 9 d1['z'][0] = 9 10 print(d1) 11 print(d2) 12 print(d3) 13 print(d4) 14 print(d5)   输

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与浅Copy

一.关于浅copy与深copy 首先说明一下: 在python中,赋值其实就是对象的引用,变量就是对象的一个标签,如果把内存对象比喻成一个个房间,那么变量就是门牌号. 深copy与浅copy只是针对可变类型而言,对于不可变类型,无论深浅,值相等,内存地址一样,一旦值发生变化,相当于再创建一个对象. 浅copy有3种方法: a=[1,2,3,["a","b"],22] a1=a[:]  切片操作 a2=list(a)  工厂函数 a3=copy.copy(a)  或

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

【C/C++学院】(6)构造函数/析构函数/拷贝构造函数/深copy浅copy

1.构造函数 类的初始化即为构造函数.也为:隐式的初始化. 构造函数在对象初始化的时候,自动被调用.隐式的调用. 构造函数分为三种:有参构造函数.无参构造函数.拷贝构造函数. 有参构造函数调用有三种:括号法.等号法.手工法. #include <iostream> using namespace std; class Test { private: int m_a; public: Test()//无参构造函数 { } Test(const Test &obj)//拷贝构造函数 { }

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

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