python3- 引用与复制(copy)

copy函数

1、变量的引用

引用针对变量的时候,传递引用后,对引用后的对象的值进行改变是不会影响到原值的:

name = "zhangsan"
student = name
name = "lisi"
print(name) 
print(student)

输出

lisi
zhangsan

2、列表的copy

2.1、直接引用“=”

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

list = [0,1,2,3,4,5]
num = list
print(num)
list[1] = 'hello'
print(list)
print(num)

返回

[0, 1, 2, 3, 4, 5]
[0, 'hello', 2, 3, 4, 5]
[0, 'hello', 2, 3, 4, 5]
2.2、浅复制copy()

在处理列表和字典时,尽管传递引用通常是处理列表和字典的最方便的方法,但如果函数修改了传递的列表或字典,您可能不希望在原始列表或字典值中进行这些更改。为此,Python提供了一个叫 copy 的模块。它有 copy() 和 deepcopy() 两个函数。copy.copy() 会拷贝列表和字典的值,而不是只拷贝了引用。

names = ["134zhangsan","lisi","@!#wangwu","zhangsan","1zhaoliu","中文"]
names2=names.copy()
print("names的值为:",names)
print("names2的值为:",names2)
names[1]="111"
print("修改后names的值为:",names)
print("修改后names2的值为:",names2)

返回如下图:
在这里插入图片描述
由此可见names和names2变量引用了不同的列表。因此改动names并不会改动到 snames2。names和names2所存储的引用ID是不一样的。

2.3、直接赋值和 copy 的区别

“=”: 直接引用对象
copy():浅copy:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用

dict1 = {'user': 'tracy', 'num': [1, 2, 3]}
dict2 = dict1  # 浅拷贝: 引用对象
dict3 = dict1.copy()  # 浅拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用
 #修改 data 数据
dict1['user'] = 'root'
dict1['num'].remove(1)
print(dict1)
print(dict2)
print(dict3)

返回

{'user': 'root', 'num': [2, 3]}
{'user': 'root', 'num': [2, 3]}
{'user': 'tracy', 'num': [2, 3]}

3、浅copy的知识补充

import  copy
names = ["134zhangsan","lisi","@!#wangwu",["aa","bb"],"zhangsan","1zhaoliu","中文"]
p1=copy.copy(names)  #第一种方式
print(p1)
p2=names[:]  #切片,第二种方式
print(p2)
p3=list(names)  #list,第三种方式
print(p3)

返回

['134zhangsan', 'lisi', '@!#wangwu', ['aa', 'bb'], 'zhangsan', '1zhaoliu', '中文']
['134zhangsan', 'lisi', '@!#wangwu', ['aa', 'bb'], 'zhangsan', '1zhaoliu', '中文']
['134zhangsan', 'lisi', '@!#wangwu', ['aa', 'bb'], 'zhangsan', '1zhaoliu', '中文']

接口自动化交流扣扣群:704807680

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值