添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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

copy函数1、变量的引用引用针对变量的时候,传递引用后,对引用后的对象的值进行改变是不会影响到原值的:name = "zhangsan"student = namename = "lisi"print(name) print(student)输出lisizhangsan2、列表的copy2.1、直接引用“=”列表的引用其实就是相当于把前面一个列表的地址同时给了一个新......
转载于:https://blog.csdn.net/zhuchuana/article/details/105679888 from shutil import copy import os #dir 需拷贝的文件夹,newdir是拷贝的地方 def copy_dir(dir,newdir): for p in os.listdir(dir): print(p) filepath=newdir+'/'+p oldpath=dir+'/'+p
因为之前是一直用的C++,但是python和C++在一些细节上还有有区别的,如果不注意就可能会造成理解错误,但是其实很多时候是没有关系的,因为就算理解错了,程序运行结果是没有问题的。但是在一些特殊情况下,还是可能会出现问题的。 参考《Python3程序开发指南第二版》P7。 直接看一个例子: x = "blue" y = "green" z = x 如果按照C++的理解方式,x是一个变量,将“...
copy-对象拷贝模块;提供了浅拷贝和深拷贝复制对象的功能, 分别对应模块中的两个函数 copy() 和 deepcopy()。 1.浅拷贝(Shallow Copies) copy() 创建的 浅拷贝 是一个新的容器,它包含了对原始对象的内容的引用。也就是说仅拷贝父对象,不会拷贝对象的内...
Python中对象的赋值其实就是对象的引用。当创建一个对象,把它赋值给另一个变量的时候,python并没有拷贝这个对象,只是拷贝了这个对象的引用而已。 浅拷贝:浅拷贝值只拷贝一层,具有自己单独的内存地址,二层或其他层不拷贝,指向原有的内存地址。 深拷贝:就是克隆一份,具有自己单独的内存地址,两者完全不相干设。 1,变量:是一个系统表的元...
最近在实习,boss给布置了一个python的小任务,学习过程中发现copy()和deepcopy()这对好基友实在是有点过分,一开始还相爱着呢,不知道怎么回事就开始相杀了。 搞的博主就有点傻傻分不清啊,但是呢,本着一探到底的极客精神,还是要查资料搞清楚这对好基友的区别。 其实呢,copy()与deepcopy()之间的区分必须要涉及到python对于数据的存储方式。 首先直接上结论:
Python中,`copy`和`deepcopy`都是用于复制对象的函数,但它们之间有一些区别。 `copy`是浅拷贝,它创建了一个新的对象,但是这个新对象仍然与原对象共享内部嵌套对象的引用。换句话说,新对象中的某些内部对象实际上是原对象中相同的对象。当你修改一个嵌套对象时,这个改变也会反映在其他拷贝中。 `deepcopy`是深拷贝,它创建了一个全新的对象,并且递归地复制原始对象及其所有嵌套对象。这意味着新对象与原对象以及其嵌套对象完全独立,对其中一个对象的任何改变都不会影响其他对象。 具体来说,`copy`只复制了原始对象的引用,而没有复制对象自身。而`deepcopy`创建了一个全新的对象,并且递归地复制所有嵌套对象。 下面是一个简单的示例来展示它们之间的区别: ```python import copy # 原始列表 original_list = [[1, 2, 3], [4, 5, 6]] # 浅拷贝 shallow_copy = copy.copy(original_list) # 深拷贝 deep_copy = copy.deepcopy(original_list) # 修改原始列表的第一个元素 original_list = 10 print(original_list) # 输出: [[10, 2, 3], [4, 5, 6]] print(shallow_copy) # 输出: [[10, 2, 3], [4, 5, 6]] print(deep_copy) # 输出: [[1, 2, 3], [4, 5, 6]] 在上面的示例中,原始列表被修改后,浅拷贝和原始列表都发生了改变,而深拷贝保持了不变。这是因为浅拷贝只复制了嵌套列表的引用,而深拷贝创建了一个新的嵌套列表。