深浅拷贝与赋值

参考:http://www.cnblogs.com/Eva-J/p/5534037.html

对于 数字 和 字符串 而言,赋值、浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址。(可以把数字,字符串看作是内存中最小的地址)

对于字典、元祖、列表 而言,进行赋值、浅拷贝和深拷贝时,其内存地址的变化是不同的。浅拷贝只拷贝第一层地址,而深拷贝是不管你数据结构多么复杂,都在内存里开辟一块新的空间,直到简单数据类型为止。

以这个字典为例:

dict = {"k1":"mu","k2":23,"k3":["alex",123]}

赋值                                                                                                                                                                                                                                                                           

dict = {"k1":"mu","k2":23,"k3":["alex",123]}
dict1=dict
print(id(dict))
print(id(dict1))
输出结果:
2243042460872
2243042460872
浅拷贝                                                                                                                                                                                                                                                                         

import copy
dict = {"k1":"mu","k2":23,"k3":["alex",123]}
dict2=copy.copy(dict)
print(id(dict))
print(id(dict2))
print(id(dict[‘k3‘]))
print(id(dict2[‘k3‘]))
输出结果:
2053865129160
2053865571208
2053867015560
2053867015560
深拷贝                                                                                                                                                                                                                                                                         

import copy
dict = {"k1":"mu","k2":23,"k3":["alex",123]}
dict3 = copy.deepcopy(dict)
print(id(dict))
print(id(dict3))
print(id(dict[‘k3‘]))
print(id(dict3[‘k3‘]))
输出结果:
3045244716232
3045245124744
3045246601736
3045246600456

深浅copy的应用举例:

 1 import copy
 2 dic = {
 3     "cpu":[80,],
 4     "mem":[80,],
 5     ‘disk‘:[80,]
 6 }
 7 print(‘before:‘,dic)
 8 new_dic = copy.copy(dic)
 9 new_dic[‘cpu‘][0] = 50
10 print(dic)
11 print(new_dic)
12 输出结果:
13 before: {‘disk‘: [80], ‘cpu‘: [80], ‘mem‘: [80]}
14 {‘disk‘: [80], ‘cpu‘: [50], ‘mem‘: [80]}
15 {‘disk‘: [80], ‘cpu‘: [50], ‘mem‘: [80]}

浅copy

 1 import copy
 2 dic = {
 3     "cpu":[80,],
 4     "mem":[80,],
 5     ‘disk‘:[80,]
 6 }
 7 print(‘before:‘,dic)
 8 new_dic = copy.deepcopy(dic)
 9 new_dic[‘cpu‘][0] = 50
10 print(dic)
11 print(new_dic)
12 输出结果:
13 before: {‘cpu‘: [80], ‘mem‘: [80], ‘disk‘: [80]}
14 {‘cpu‘: [80], ‘mem‘: [80], ‘disk‘: [80]}
15 {‘cpu‘: [50], ‘mem‘: [80], ‘disk‘: [80]}

深copy

时间: 2024-10-02 08:25:53

深浅拷贝与赋值的相关文章

深浅拷贝,赋值

python中关于对象复制有三种类型的使用方式,赋值.浅拷贝与深拷贝.他们既有区别又有联系,刚好最近碰到这一类的问题,研究下. 一.赋值 在python中,对象的赋值就是简单的对象引用,这点和C++不同.如下: list_a = [1,2,3,"hello",["python","C++"]] list_b = list_a 这种情况下,list_b和list_a是一样的,他们指向同一片内存,list_b不过是list_a的别名,是引用. 我们可

Python中的深浅拷贝,赋值及引用

简单来说,若对象a中存的是列表或字典等可变对象,b对a的浅拷贝只是对对象第一层的复制,修改b第二层的元素仍然会影响两个对象. 深拷贝则是不会影响原来的对象. import copy.copy() 浅拷贝 copy.deepcopy()  深拷贝 赋值操作更像是一个引用,新的赋值会创建一个新的内存地址,指向改变了,原来的内存地址还会存在. 参考文章地址: python基础(5):深入理解 python 中的赋值.引用.拷贝.作用域 http://my.oschina.net/leejun2005/

知识点补充 set 深浅拷贝

一 对前面知识点的补充 1.str中的join()方法是将列表转换成字符串 lst = ["韩雪","赵丽颖","黄渤","李连杰"] print("_".join(lst)) # 韩雪_赵丽颖_黄渤_李连杰 将每个元素用_进行拼接 s = "马化腾" print("-".join(s)) # 马-化-腾 2.把字符串转换成列表  用split() ss = &quo

python 赋值 深浅拷贝

深浅拷贝 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import copy # ######### 数字.字符串 ######### n1 = 123 # n1 = "i am alex age 10" print(id(n1)) # ## 赋值 ## n2 = n1 print(id(n2)) # ## 浅拷贝 ## n2 = copy.copy(

python——赋值与深浅拷贝

初学编程的小伙伴都会对于深浅拷贝的用法有些疑问,今天我们就结合python变量存储的特性从内存的角度来谈一谈赋值和深浅拷贝~~~ 预备知识一--python的变量及其存储 在详细的了解python中赋值.copy和deepcopy之前,我们还是要花一点时间来了解一下python内存中变量的存储情况. 在高级语言中,变量是对内存及其地址的抽象.对于python而言,python的一切变量都是对象,变量的存储,采用了引用语义的方式,存储的只是一个变量的值所在的内存地址,而不是这个变量的只本身.  引

(转)(终极改良版)python基础番外——赋值与深浅拷贝

初学编程的小伙伴都会对于深浅拷贝的用法有些疑问,今天我们就结合python变量存储的特性从内存的角度来谈一谈赋值和深浅拷贝~~~ 预备知识一--python的变量及其存储 在详细的了解python中赋值.copy和deepcopy之前,我们还是要花一点时间来了解一下python内存中变量的存储情况. 在高级语言中,变量是对内存及其地址的抽象.对于python而言,python的一切变量都是对象,变量的存储,采用了引用语义的方式,存储的只是一个变量的值所在的内存地址,而不是这个变量的只本身. 引用

python中的“赋值与深浅拷贝”

Python中,赋值与拷贝(深/浅拷贝)之间是有差异的,这主要源于数据在内存中的存放问题,本文将对此加以探讨. 1 赋值(添加名字) 赋值不会改变内存中数据存放状态,比如在内存中存在一个名为data的数据,此时若执行语句data_01 = data,则现在该份数据有了两个名称(data和data_01),其余都不发生改变,使用任何一个名称对数据进行操作,那么用另外一个名称拿数据时,数据会呈现之间发生的改变.示例如下: 图中,给列表分配了两个名称a与b,对a做改变时b会同样改变,对b做改变时a也会

python学习笔记4:基础(集合,collection系列,深浅拷贝)

转载至:http://www.cnblogs.com/liu-yao/p/5146505.html 一.集合 1.集合(set): 把不同的元素组成一起形成集合,是python基本的数据类型.集合元素(set elements):组成集合的成员 python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)

C++模板实现动态顺序表(更深层次的深浅拷贝)与基于顺序表的简单栈的实现

前面介绍的模板有关知识大部分都是用顺序表来举例的,现在我们就专门用模板来实现顺序表,其中的很多操作都和之前没有多大区别,只是有几个比较重要的知识点需要做专门的详解. 1 #pragma once 2 #include<iostream> 3 #include<string> 4 #include<stdlib.h> 5 using namespace std; 6 7 template <class T> 8 class Vector 9 { 10 publ