Python的浅拷贝与深拷贝】的更多相关文章

深度解析python之浅拷贝与深拷贝 本文包括知识点: 1.copy与deepcopy 2.可变类型与不可变类型 1.copy与deepcopy 在日常python编码过程中,经常会遇见变量的赋值.这一部分会用代码+图解的形式解释=,copy,deepcopy的区别. 1. 直接赋值 Bill = ["Gates", 50, ["Python", "C#", "JavaScript"]] Jack = Bill print i…
python对象有两种拷贝的形式:浅拷贝和深拷贝. 在<python核心编程>中看到对这两种拷贝的分析,觉得十分收益,所以记录在此. id()方法:id()方法可以查看某个对象的ID,类似于在内存中的地址.可以用它来查看两个对象是否在同一个内存地址中.用法:id(x) 现在进行两种拷贝的测试. 假设现在要存储一个家庭的财务信息.我们把信息存在一个列表中 person = ['name',['saving',100.00] hubby = person[:] #丈夫的账户wifey = list…
1,“相等”与“相同” 我们先赋值三个变量a, b, c: a = [1, 2, [1, 2]] b = [1, 2, [1, 2]] c = a 判断一下‘相等’: a == b  返回 True a == c  返回 True b == c  返回 True 判断一下‘相同’: a is b  返回 False b is c  返回 False a is c  返回 True 这里说明了,‘相等’和‘相同’是不一样的.==是一个比较运算符,用来比较对象值是否相等,若相等返回True,否则返回…
1.浅拷贝 1>赋值:从下面的例子我们可以看到赋值之后新变量的内存地址并没有发生任何变化,实际上python中的赋值操作不会开辟新的内存空间,它只是复制了新对象的引用,也就是说除了b这个名字以外,没有其他的内存开销,这时如果修改了a的值,就会影响b的值,同理,如果修改b的值,也会影响a的值. 2>浅拷贝是对引用的拷贝,它只拷贝了副对象,所以说id(a)!=id(c),那么对象内部的资源依然是引用,所以内部id(a[0])==id(c[0]).id(a[2][0])==id(c[2][0]),那…
定义: =号浅拷贝:在Python中对象的赋值其实就是对象的引用.copy了之后两个仍然是同一个东西.那么他们内部的元素自然也是一样的,对其中一个进行修改,另一个也会跟着变> copy()浅拷贝:拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已.也就是,把对象复制一遍,但是该对象中引用的其他对象我不复制.(copy了子对象) copy.deepcopy()深拷贝:外围和内部元素都进行了拷贝对象本身,而不是引用.也就是,把对象复制一遍,并且该对象中引用的其他对象我也复制.(子对象的子对象…
浅拷贝 shallow copy 和深拷贝 deep copy list.copy() 浅拷贝:复制此列表(只复制一层,不会复制深层对象) 等同于 L[:] 举例: 浅拷贝: a = [1.1, 2.2] # a = [1.1, 2.2] b = [1, 2, a] # b = [1, 2, [1.1, 2.2]] c = b.copy() # c = [1, 2, [1.1, 2,2]] a[0] = 1.123 b =  [1, 2, [1.123, 2.2]] c =  [1, 2, [1…
单层浅拷贝 import copy a = 1 # 不可变数据类型 copy_a = copy.copy(a) print(id(a),id(copy_a)) # 内存地址相同 a = [1,2] # 可变数据类型 copy_a = copy.copy(a) print(id(a),id(copy_a)) # 内存地址不相同 单层深拷贝 import copy a = 1 # 不可变数据类型 copy_a = copy.deepcopy(a) print(id(a),id(copy_a)) #…
首先,我们知道Python3中,有6个标准的数据类型,他们又分为可以变和不可变.不可变:Number(数字).String(字符串).Tuple(元组).可以变:List(列表).Dictionary(字典).Set(集合). 一.浅拷贝 a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)浅拷贝后,改变原始对象中为可变类型的元素的值,会同时影响拷贝对象:改变原始对象中为不可变类型的元素的值,不会响拷贝对象. #定义一个列表,第一个元素是可变类型>>> A = [[1,…
浅拷贝 可变类型浅拷贝copy函数就是浅拷贝,只对可变类型的第一层对象进行拷贝,对拷贝的对象开辟新的内存空间进行存储,不会拷贝对象内部的子对象可变类型:a = [1, 2, 3] b = [11, 22, 33]有子对象的可变类型: data = [a, b]普通赋值data_mycopy = data -- data和data_mycopy指向同一片空间浅拷贝data_copy = copy.copy(data) -- data和data_copy指向不同的空间 不可变类型浅拷贝不可变类型进行…
#直接赋值 list = [1,2,['a','b'],'python'] #现将a等于list a = list print a [1,2,['a','b'],'python'] list.append(5) print list [1,2,['a','b'],'python',5] print a [1,2,['a','b'],'python',5] #直接赋值其实是传递对象的引用,原始列表改变,被赋值的a也会做相同的改变. #如果需要拷贝对象,需要使用标准库中的copy模块. import…