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