不管对于浅拷贝、还是深拷贝,针对不可变对象str、int、tuple(有点特殊)、boolean,它的内存地址是不变的,拷贝的仅仅是值 highlighter- Python importcopya =1b = copy.copy(a)# 浅拷贝ac = copy.deepcopy(a)# 深拷贝aprint(aisb)print(aisc)>>>True>>>Trueis比较的是二者的内存地址是否相同 浅拷贝 浅拷...
tuple_b=copy.copy(tuple_a) tuple_aistuple_b#返回True。根本没有进行浅复制,copy.copy(tuple_a) 直接返回了tuple_a 为什么copy.copy对于不同的对象有不同的行为? copy.copy会使用对象中定义的__copy__或者copy方法,如果对象没有定义相关方法,就直接返回这个对象。 a= [30,40] tuple_a= (1, 2, a) ...
import copy a = ['hello',[1,2,3]] b = copy.copy(a) for x in (a,b): print(x) print("update") a.append(4) for x in (a,b): print(x) 注意: 浅拷贝b = copy.copy(a)等价于b = a[:] 一张旧船票,已经登不上远去的客船。 深拷贝: from copy importdeepcopya = ['hello',[...
print("内部第2个大容器:不可变类型:tuple来自同一个引用") else: print("内部第2个大容器:不可变类型:tuple来自不同的引用") if id(oldLi[2][0]) == id(newLi[2][0]): print("内部第2个大容器的数据项:不可变类型:int :%r来自同一个引用" % oldLi[2][0]) else: print("内部第2个大容器...
我估计平常你用的copy模块下copy函数会多一些,比如: ⚠️但是注意,对于静态元组来说,使用tuple或者切片操作符':'不会创建一份浅拷贝,而是返回一个指向相同元组的引用。例如: 通过上面的几个变量的操作,估计你也明白,浅拷贝实际上就是重新分配一块内存,创建一个新的对象,而里面的元素是对原对象中子对象的引用...
1、复制不可变数据类型(int、string、tuple)的时候,无论是copy(浅拷贝)、deepcopy(深拷贝)或者“=” 的地址都与原对象id地址一样 代码: import copy # 不可变类型(int、string、tuple) a = "你好" b = a c = copy.copy(a) # 浅拷贝 d = copy.deepcopy(a) # 深拷贝 ...
在例2.2中先将a赋值给b,又将[4,5,6]赋值给a,这时已经给a创建了新的内存空间,所以打印a,b时a和b的值并不相同。 下面来看下深浅拷贝的不同之处: 首先字符串 、元组以及数值的深浅拷贝是没有差别的,如下例子所示: #例3.1 # 字符串 import copy a = '1345' b = copy.copy(a) c = copy.deepcopy(...
在Python 标准库中有一个 copy 模块,可以使用 copy 模块的 copy() 方法来拷贝数据,copy 模块可以拷贝所有类型的数据。 二、拷贝的数据被修改 代码语言:javascript 代码运行次数:0 运行 AI代码解释 importcopy son=['python','copy']base=['a','b','c','d','e',son]bak1=base[:]print("bak1: ",...
c = copy.deepcopy(a)print(id(a),id(b),id(c)) 输出:932648093264809326480[Finishedin0.1s] # 元组importcopy a = (1,2,3) b = copy.copy(a) c = copy.deepcopy(a)print(id(a),id(b),id(c)) 输出:107154241071542410715424[Finishedin0.2s] ...
tup = tuple((1, 2, 3, 4, 5)) print("值:%r,类型:%r" % (tup, type(tup))) #值:(1, 2, 3, 4, 5),类型:<class 'tuple'> 也可以选择使用更方便的字面量形式进行对象声明,使用逗号对数据项之间进行分割: code tup = 1, 2, 3, 4, 5 ...