python中字典copy_python 列表和字典的引用与复制(copy)

列表或字典的引用:

引用针对变量的时候,传递引用后,对引用后的对象的值进行改变是不会影响到原值的;而列表不一样如:

spam =42

cheese = spam

spam =100

print(spam)      #out:100

print(cheese)   #out:42

如果对列表进行引用会是什么情况呢,我们来看看

spam = [0,1,2,3,4,5]

cheese = spam

print(spam)

cheese[1] = 'hello'

print(spam)

print(cheese)

out:

[0, 1, 2, 3, 4, 5]

[0, 'hello', 2, 3, 4, 5]

[0, 'hello', 2, 3, 4, 5]

结果我们发现cheese 是引用的spam的,我们改变cheese之后 spam的值也跟着改变了;这个就跟我们当初学的C语言一样;列表的引用其实就是相当于把前面一个列表的地址同时给了一个新的列表用。结果这两个列表都指向了同一地址;而这个地址里面本身就只能存放一组数据,不管是对这两个列表谁进行操作都会把这个地址中的数据重新更新;也因此列表可以用来形参的传递来改变实参的值,而变量不同,变量的形参传递是不会改变实参的值的;

def eggs(somePrameter):

somePrameter.append('Hello')

def trees(somename):

somename+='Hello'

print('形参值:'+somename)

spam = [0,1,2,3]

treename = '梧桐'

eggs(spam)

trees(treename)

print(spam)

print('实参值:'+treename)

out:

形参值:梧桐Hello

[0, 1, 2, 3, 'Hello']

实参值:梧桐

列表或字典的复制

在处理列表和字典时,尽管传递引用常常是最方便的方法,但如果函数修改了传入的列表和字典,你可能不希望这些变动影响到原来的列表或字典。要做到这一点,Python提供了copy的模块,其中包含copy()和deepcopy()函数。第一个函数copy.copy(),可以用来复制列表或字典这样的可变值,而不是复制引用.注意这需要用到copy模块,因此要import copy

如上示例做些许更改所示:

import copy

spam = [0,1,2,3,4,5]

cheese = copy.copy(spam)

print(spam)

cheese[1] = 'hello'

print(spam)

print(cheese)

out:

[0, 1, 2, 3, 4, 5]

[0, 1, 2, 3, 4, 5]

[0, 'hello', 2, 3, 4, 5]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值