深、浅拷贝

1、首先对于数字和字符串而言,深浅拷贝无实际意义,两者同时指向同一个内存地址。

1 a = 123
2 print(id(a))
3
4 b = a
5 print(id(b))
6
7
8 495849744
9 495849744

2、对于字典、元祖、列表 而言,进行赋值、浅拷贝和深拷贝时,其内存地址的变化是不同的。

浅拷贝,内存地址不变,两次赋值都指向同一个内存地址。

import copy

a = {"k1": "v1", "k2": 111, "k3": ["v2", 222]}
print(id(a))

b = copy.copy(a)
print(id(b))

10278600
10278600

深拷贝,在内存中将所有的数据重新创建一份(排除最后一层),其实就是排除掉了最后一层的字符串和数字。

 1 import copy
 2
 3 a = {"k1": "v1", "k2": 111, "k3": ["v2", 222]}
 4 print(id(a))
 5
 6 b = copy.deepcopy(a)
 7 print(id(b))
 8
 9
10 10147528
11 10598792
时间: 2024-10-13 16:16:07

深、浅拷贝的相关文章

c++深/浅拷贝 && 构造函数析构函数调用顺序练习题

1.深/浅拷贝 编译器为我们提供的合成拷贝构造函数以及合成的拷贝赋值运算符都是浅拷贝.浅拷贝只是做简单的复制,如果在类的构造函数中new出了内存,浅拷贝只会简单的复制一份指向该内存的指针,而不会再开辟内存,这就会使得程序运行出现内存错误,如此,当对象析构的时候,会delete多次同一块内存区域,发生错误.这也就是为什么,必要的时候需要我们自己编写拷贝构造函数和重载赋值运算符,让它变成深拷贝,深拷贝即在copy指针的时候不是简单做值copy,而是还要开辟内存. 2.构造函数析构函数调用顺序练习题

iOS 浅谈:深.浅拷贝与copy.strong

深.浅拷贝 copy mutableCopy NSString NSString *string = @"汉斯哈哈哈"; // 没有产生新对象 NSString *copyString = [string copy]; // 产生新对象 NSMutableString *mutableCopyString = [string mutableCopy]; NSLog(@"string = %p copyString = %p mutableCopyString = %p&quo

Python深复制浅复制or深拷贝浅拷贝

1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象.(比深拷贝更加节省内存) 2. copy.deepcopy 深拷贝 拷贝对象及其子对象 小例子: import copy a = [1, 2, 3, 4, ['a', 'b', 'c']] b = a c = copy.copy(a) d = copy.deepcopy(a) print(id(a))#2552169009288 print(id(b))#2552169009288 print(id(c))#255216

QImage的浅拷贝与深拷贝

 首先简单说说什么是浅拷贝和深拷贝:浅拷贝就比如像引用类型,而深拷贝就比如值类型,即浅拷贝是共用一块内存的,而深拷贝是复制一份内容.   我们再来看看QImage类的几个构造函数: // 浅拷贝 QImage(uchar * data, int width, int height, Format format) // 浅拷贝 QImage(const uchar * data, int width, int height, Format format) // 浅拷贝 QImage(uchar *

Python 深拷贝和浅拷贝

Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果. 下面本文就通过简单的例子介绍一下这些概念之间的差别. 对象赋值 直接看一段代码: will=["Will",28,["Python","C#","JavaScript"]] wilber=will print id(will) print will print [id(x) for x in will] print id

图解Python深拷贝和浅拷贝

Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果. 下面本文就通过简单的例子介绍一下这些概念之间的差别. 对象赋值 直接看一段代码: will = ["Will", 28, ["Python", "C#", "JavaScript"]] wilber = will print id(will) print will print [id(ele) for ele in wi

python中深复制与浅复制

转载:http://blog.csdn.net/vicken520/article/details/8227524 java中也经常碰见这种问题.时间原因就不写java方面啦 Python深复制浅复制or深拷贝浅拷贝 简单点说 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象.2. copy.deepcopy 深拷贝 拷贝对象及其子对象 用一个简单的例子说明如下: >>>import copy>>>a = [1, 2, 3, 4, ['a', 

深copy及浅copy的对比

转自 http://python.jobbole.com/82294/ Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果. 下面本文就通过简单的例子介绍一下这些概念之间的差别. 对象赋值 直接看一段代码: Python 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 will = ["Will", 28, ["Python", "C#", "Ja

python深拷贝浅拷贝

Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果. 下面本文就通过简单的例子介绍一下这些概念之间的差别. 对象赋值 直接看一段代码: 按 Ctrl+C 复制代码 will = ["Will", 28, ["Python", "C#", "JavaScript"]]wilber = willprint id(will)print willprint [id(ele) for

【转载】图解 Python 深拷贝和浅拷贝

作者:田小计划 出处:http://www.cnblogs.com/wilber2013/ Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果. 下面本文就通过简单的例子介绍一下这些概念之间的差别. 对象赋值 直接看一段代码: will = ["Will", 28, ["Python", "C#", "JavaScript"]] wilber = will print id