【python】dict的拷贝问题

部分来源:http://blog.sina.com.cn/s/blog_5c6760940100bmg5.html

①直接赋值 ---- 结果是不同名的引用

对新字典的修改完全作用在了原来的字典上,只是引用的关系

>>> c = {‘a‘:1,‘b‘:2}
>>> d = c
>>> d[‘e‘]=3
>>> d
{‘a‘: 1, ‘b‘: 2, ‘e‘: 3}
>>> c
{‘a‘: 1, ‘b‘: 2, ‘e‘: 3}
>>> f = dict()
>>> f = d
>>> f["k"]=4
>>> f
{‘a‘: 1, ‘k‘: 4, ‘b‘: 2, ‘e‘: 3}
>>> c
{‘a‘: 1, ‘k‘: 4, ‘b‘: 2, ‘e‘: 3}

②使用copy()函数 --- 浅拷贝。

如果一个字典中有引用类型,如list,复制只会复制其引用而不会复制其值:

>>> d = {‘names‘: [‘bob‘, ‘sam‘]}
>>> y = d.copy()
>>> y[‘names‘][0] = ‘jack‘
>>> y
{‘names‘: [‘jack‘, ‘sam‘]}
>>> d
{‘names‘: [‘jack‘, ‘sam‘]}

③深拷贝 deepcopy

>>> from copy import deepcopy
>>> d = {‘names‘: [‘bob‘, ‘sam‘]}
>>> y = deepcopy(d)
>>> y[‘names‘][0] = ‘jack‘
>>> d
{‘names‘: [‘bob‘, ‘sam‘]}
>>> y
{‘names‘: [‘jack‘, ‘sam‘]}
时间: 2024-10-12 08:02:48

【python】dict的拷贝问题的相关文章

python之深浅拷贝(基础四)

第六章python之深浅拷贝(基础四) 6.1 小数据池 小数据池就是Python中一种提高效率的方式,固定数据类型使用同一个内存地址 小数池 -- 支持: str,int,bool a = 1 b = 1 id 查看空间的内存地址 获取开辟空间的一种地址 print(id(a)) print(id(b)) 小数据池数字支持范围: -5 ~ 256 *记住 a = 300 b = 300 print(id(a)) print(id(b)) 代码块: 一个文件,一个模块,一个函数,一个类,终端中每

python闭包&深浅拷贝&垃圾回收&with语句

1.1 闭包 1.闭包概念 1. 在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用,这样就构成了一个闭包 2. 一般情况下,在我们认知当中,如果一个函数结束,函数的内部所有东西都会释放掉,还给内存,局部变量都会消失. 3. 但是闭包是一种特殊情况,如果外函数在结束的时候发现有自己的临时变量将来会在内部函数中用到,就把这个临时变量绑定给了内部函数,然后自己再结束.   2.闭包特点 1. 必须有一个内嵌函数 2. 内嵌函数必须引用外部函数中的变量 3

Python编程学习——拷贝

简介: 这一篇博客主要讨论Python对象的拷贝问题,区分浅拷贝和深拷.为了保持追踪内存中的对象,Python使用了引用计数这一简单技术,下面将进行简单介绍. 1.引用计数: 当对象被创建并赋值给变量时,该对象的引用计数就被设置为 1 .当同一个对象又被赋值给其他变量时,或作为参数传给函数.方法或类实例时,或被赋值为一个窗口对象的成员时,该对象的一个新的引用(或称为别名)就被创建,该对象的引用计数加 1 .使用del关键字可以减少引用计数. 我们可以看到下面代码: #!/usr/bin/env

Python dict & set

1        Dict和Set 1.1   Dict(无序键值不可重复) Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度. 举个例子,假设要根据同学的名字查找对应的成绩,如果用list实现,需要两个list: names = ['Michael', 'Bob', 'Tracy'] scores = [95, 75, 85] 给定一个名字,要查找对应的成绩,就先要在names中找到对应

Python Dict用法

Operation Result len(a) the number of items in a 得到字典中元素的个数 a[k] the item of a with key k 取得键K所对应的值 a[k] = v set a[k] to v 设定键k所对应的值成为v del a[k] remove a[k] from a 从字典中删除键为k的元素 a.clear() remove all items from a 清空整个字典 a.copy() a (shallow) copy of a 得

Python dict 以 1和True 作为键值的比较

运行环境: 操作系统:Win7 64位 Python版本: 2.7.12 IDE:pycharm 2017.2 测试代码: 测试Python dict 1 和 True 作为键值 测试 demo 如下: #!/usr/bin/env python# -*- coding:utf-8 -*- __author__ = "liukang" dict_test = {}print dict_testdict_test[1] = 1print dict_testdict_test[True]

python dict 排序

我们知道Python的内置dictionary数据类型是无序的,通过key来获取对应的value.可是有时我们需要对dictionary中 的item进行排序输出,可能根据key,也可能根据value来排.到底有多少种方法可以实现对dictionary的内容进行排序输出呢?下面摘取了 一些精彩的解决办法. python对容器内数据的排序有两种,一种是容器自己的sort函数,一种是内建的sorted函数. sort函数和sorted函数唯一的不同是,sort是在容器内(in-place)排序,so

针对Python的深浅拷贝问题

前些天做了个小程序,遇到了Python的深浅拷贝问题 感觉自己基础不够扎实,就翻了翻教程,真的是非常基础的知识...(各位大佬下手轻点2333) 下面简单说说: 首先有个字典a 1 a = {'A':1,'B':2,'C':3,'D':4} 然后我们把它赋值给另外一个空字典b 1 b = {} 2 b = a 当我们输出b时,可以看到a和b直观上看好像是相等了 按照常理,我们会认为a和b现在是两个值相等的字典,如果我们对其中一个操作,另外一个应该不会受到影响才对,所以我们试一下: 我们尝试删除b

python中深浅拷贝

在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用 一般有三种方法, alist=[1,2,3,["a","b"]] (1)直接赋值,默认浅拷贝传递对象的引用而已,原始列表改变,被赋值的b也会做相同的改变 >>> b=alist>>> print b[1, 2, 3, ['a', 'b']]>>> alist.ap

Python的深浅拷贝

Python深浅拷贝 一丶引言 在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用 针对该列表 11 = ['a','b','c',['d','e','f']] 一般有三种方法,分别为:拷贝(赋值).浅拷贝.深拷贝 注意:拷贝/浅拷贝/深拷贝 都是针对数据可变类型数据而言的 1.1丶可变or不可变 id不变值可变,即在原值的基础上修改,则为可变数据类型:值变id也变,即重新申请一个空间放入新值,则