python 字典中的copy函数的浅拷贝问题

python浅拷贝与深拷贝

浅拷贝是指拷贝的只是原对象元素的引用,换句话说,浅拷贝产生的对象本身是新的,但是它的内容不是新的,只是对原对象的一个引用。

深拷贝是复制一个内容而不是简单的复制引用而已

换句话说:有指针的情况下,浅拷贝只是增加了一个指针指向已经存在的内存,而深拷贝就是增加一个指针并且申请一个新的内存,使这个增加的指针指向这个新的内存
也就是说,在浅拷贝情况下,不同引用指向的是同一块内存,改其中一个引用,那么其他引用也会跟着改变

举个例子:

myDict={'a':2,3:['x','y'],'joe':'smith'}
newDict=myDict.copy()
newDict['a']=7
newDict[3][0]='z'
print myDict
print newDict

运行结果

{'a': 2, 3: ['z', 'y'], 'joe': 'smith'}
{'a': 7, 3: ['z', 'y'], 'joe': 'smith'}

既然是浅拷贝,应该键a的值都为7才对,后经过查阅资料得知,如果对象本身是不可变的,那么浅拷贝时也会产生两个值

可变类型: 列表,字典
不可变类型:数字,字符串,元组

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python字典是一种非常常用的数据类型。当我们需要复制一个字典时,可以使用字典copy()方法或者内置函数dict()来实现。这两种方法都可以复制一个字典,但是它们的实现方式略有不同。 使用字典copy()方法,可以创建一个新的字典,该字典包含原始字典所有的键值对。这个新字典是原始字典的一个副本,但是它们是两个不同的对象,修改其一个字典不会影响另一个字典。例如: ``` dict_01 = {"name": "张三", "age": 20} dict_02 = dict_01.copy() print("dict_02:", dict_02) print("dict_01:", dict_01) dict_02["name"] = "李四" print("dict_02:", dict_02) print("dict_01:", dict_01) print("dict_01的引用:", id(dict_01)) print("dict_02的引用:", id(dict_02)) ``` 输出: ``` dict_02: {'name': '张三', 'age': 20} dict_01: {'name': '张三', 'age': 20} dict_02: {'name': '李四', 'age': 20} dict_01: {'name': '张三', 'age': 20} dict_01的引用: 4310921664 dict_02的引用: 4310921728 ``` 使用内置函数dict(),可以创建一个新的字典,该字典包含原始字典所有的键值对。这个新字典也是原始字典的一个副本,但是它们是两个不同的对象,修改其一个字典不会影响另一个字典。例如: ``` dict_01 = {"name": "张三", "age": 20} dict_02 = dict(dict_01) print("dict_02:", dict_02) print("dict_01:", dict_01) dict_02["name"] = "李四" print("dict_02:", dict_02) print("dict_01:", dict_01) print("dict_01的引用:", id(dict_01)) print("dict_02的引用:", id(dict_02)) ``` 输出: ``` dict_02: {'name': '张三', 'age': 20} dict_01: {'name': '张三', 'age': 20} dict_02: {'name': '李四', 'age': 20} dict_01: {'name': '张三', 'age': 20} dict_01的引用: 4302451136 dict_02的引用: 4303857856 ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值