【Python 拓展之详解深拷贝和浅拷贝】教程文章相关的互联网学习教程文章

Python列表赋值拷贝,浅拷贝,深拷贝的区别!【图】

赋值拷贝又称引用拷贝 本质是创建一个指向被拷贝列表的引用,他们使用的是同一块内存区域,因为无论更改其中任何一个变量,我们被拷贝的变量也会跟着改变。简单的来说,赋值拷贝,无论把列表赋值给多少个变量,这些变量指向的都是同一个列表.如下面的例子,创建一个列表list1,将list1赋值给list3,然后给list3添加一个元素9,打印list3和list1,list3增加了一个元素9,list1也增加了一个元素9.打印他们的内存地址id,id是一样的. ```Python资...

Python-传递可变/不可变对象,浅拷贝、深拷贝

参数的传递 本质:从实参到形参的赋值操作。参数的传递都是“引用传递”,不是“值传递”。具体分为两类: 对“可变对象”(例如:字典、列表、集合、自定义的对象)进行“写操作”,直接作用于原对象本身 对“不可变对象”(例如:数字、字符串、元组、布尔值、function等)进行“写操作”,实际传递还是对象的引用,由于不可变对象无法修改,在赋值的时候,系统会创建一个新的对象。即:生成一个“对象空间...

Python中的深拷贝与浅拷贝【图】

首先以列表为例,来看python中的深拷贝与浅拷贝: 如下图,a和b的地址是一样的,b只是指向了a的地址。copy.copy后,d只是开辟了一段新的空间,拷贝了c的引用copy.deepcopy,是直接拷贝了内容。

Python列表赋值,复制,深拷贝以及5种浅拷贝详解【代码】

Python列表赋值,复制,深拷贝以及5种浅拷贝详解 概述 在列表复制这个问题,看似简单的复制却有着许多的学问,尤其是对新手来说,理所当然的事情却并不如意,比如列表的赋值、复制、浅拷贝、深拷贝等绕口的名词到底有什么区别和作用呢? 列表赋值 # 定义一个新列表 l1 = [1, 2, 3, 4, 5] # 对l2赋值 l2 = l1 print(l1) l2[0] = 100 print(l1) 示例结果: [1, 2, 3, 4, 5] [100, 2, 3, 4, 5] 可以看到,更改赋值后的L2后L1同样也会被...

Python 提高 深拷贝、浅拷贝【图】

深拷贝、浅拷贝 1. 浅拷贝 浅拷贝是对于一个对象的顶层拷贝 通俗的理解是:拷贝了引用,并没有拷贝内容2. 深拷贝 深拷贝是对于一个对象所有层次的拷贝(递归)进一步理解深拷贝3. 拷贝的其他方式 分片表达式可以赋值一个序列字典的copy方法可以拷贝一个字典4. 注意点 浅拷贝对不可变类型和可变类型的copy不同 copy.copy对于可变类型,会进行浅拷贝 copy.copy对于不可变类型,不会拷贝,仅仅是指向In [88]: a = [11,22,33] In [89]: b...

python_深拷贝与浅拷贝【代码】【图】

一、深拷贝和浅拷贝的区分 深拷贝:A变量变化,B变量不受影响 浅拷贝:A变量变化,B变量跟着改变 常见的深拷贝和浅拷贝 浅拷贝: 赋值 l=list1 ,l和list1指向的同一块内存,两者一起变化 深拷贝:定义 l=[1,2,3] 切片赋值 l=list1[:] 深度复制 l=copy.deepcopy(list1) 程序举例: 1、赋值 list1=[1,2,3,4] #定义 list2=list1 #直接赋值给list2,两者内存指向一个位置 for i in list1:if i%2: #奇数移除list1.remove(i)...

深度解读Python深拷贝与浅拷贝问题【图】

在平时工作中,经常涉及到数据的传递,在数据传递使用过程中,可能会发生数据被修改的问题。为了防止数据被修改,就需要在传递一个副本,即使副本被修改,也不会影响原数据的使用。为了生成这个副本,就产生了拷贝。今天就说一下Python中的深拷贝与浅拷贝的问题。 概念普及:对象、可变类型、引用 数据拷贝会涉及到Python中对象、可变类型、引用这3个概念,先来看看这几个概念,只有明白了他们才能更好的理解深拷贝与浅拷贝到底是怎...

(一)Python入门-5函数:05参数的传递-可变对象-不可变对象-浅拷贝和深拷贝-不可变对象含可变子对象【代码】

一:参数的传递函数的参数传递本质上就是:从实参到形参的赋值操作。 Python中“一切皆对象”, 所有的赋值操作都是“引用的赋值”。所以,Python中参数的传递都是“引用传递”,不 是“值传递”。具体操作时分为两类:1. 对“可变对象”进行“写操作”,直接作用于原对象本身。2. 对“不可变对象”进行“写操作”,会产生一个新的“对象空间”,并用新的值填 充这块空间。(起到其他语言的“值传递”效果,但不是“值传递”)可变...

python深拷贝和浅拷贝【图】

在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用 一般有三种方法, alist=[1,2,3,["a","b"]] (1)直接赋值,默认浅拷贝传递对象的引用而已,原始列表改变,被赋值的b也会做相同的改变 >>> b=alist>>> print b[1, 2, 3, [a, b]]>>> alist.append(5)>>> print alist;print b[1, 2, 3, [a, b], 5][1, 2, 3, [a, b], 5](2)copy浅拷贝...

Python——深拷贝和浅拷贝【代码】

深拷贝、浅拷贝 1. 浅拷贝 浅拷贝是对于一个对象的顶层拷贝import copya = [[1, 2], 3] b = copy.copy(a) print(id(a)) print(id(b)) print(id(a[0])) print(id(b[0])) print(id(a[1])) print(id(b[1]))a[0].append(1) print(a) print(b)输出结果:2249583452872 2250135748552 2249583452808 2249583452808 140714232963984 140714232963984 [[1, 2, 1], 3] [[1, 2, 1], 3] copy()是浅拷贝,只拷贝了最顶层的数组,而数组中的内容...

python-浅拷贝和深拷贝【代码】【图】

浅拷贝和深拷贝 浅拷贝 拷贝的副本共享内部对象的引用的拷贝为浅拷贝 举个栗子list1 = [1, 2, [3, 4], (5, 6)] list2= list(list1) print("list1: ", list1, " list2: ", list2) #list1: [1, 2, [3, 4], (5, 6)] list2: [1, 2, [3, 4], (5, 6)] print("list1 id: ", id(list1), " list2 id: ", id(list2)) #list1 id: 4940488 list2 id: 38569032print("\nlist1 element id:") for ele1 in list1:print(id(ele1)) #list1...

Python3的深拷贝和浅拷贝

a = 1 b = a a = 2 print(a, b) print(id(a), id(b)) """ 运行结果 2 1 1445293568 1445293536 """# 列表直接复赋值给列表不属于拷贝, 只是内存地址的引用 list1 = ["a", "b", "c"] list2 = list1 list1.append("d") print(list1, list2) print(id(list1), id(list2)) """ 运行结果 ['a', 'b', 'c', 'd'] ['a', 'b', 'c', 'd'] 1947385383176 1947385383176 """# 浅拷贝 list1 = ["a", "b", "c"] list2 = list1.copy() list1.appen...

python深拷贝与浅拷贝【图】

可变对象与不可变对象 要理解深拷贝和浅拷贝,首先要理解可变对象和不可变对象。 不可变对象:该对象所指向的内存中的值不能被改变,修改对象的值时,由于其指向的值不能被改变,因此实际上是在内存中重新开辟一个地址用来存储新的值,然后将对象指向这个新值。本质上是两个对象,赋值前后对象id发生了变化。python中的不可变对象包括:bool、int、str、float、tuple、frozenset、None。 可变对象:该对象所指向的内存中的值可以被...

【转】python的复制,深拷贝和浅拷贝的区别【图】

在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用 一般有三种方法, alist=[1,2,3,["a","b"]] (1)直接赋值,默认浅拷贝传递对象的引用而已,原始列表改变,被赋值的b也会做相同的改变 >>> b=alist>>> print b[1, 2, 3, [a, b]]>>> alist.append(5)>>> print alist;print b[1, 2, 3, [a, b], 5][1, 2, 3, [a, b], 5](2)copy浅拷贝...

[Python]字典的赋值、浅拷贝、深拷贝

import copy     #原字典dict1 = {1:1,user: test, num: [1, 2, 3]};#直接赋值dict2 = dict1;dict3 = dict1.copy();dict4 = copy.deepcopy(dict1);dict1[1] = 11;dict1[user] = 123;dict1[num].remove(1);print(------------------------------------);print(原字典修改后:,dict1);print(直接赋值:,dict2);print(浅拷贝:,dict3);print(深拷贝:,dict4);print(------------------------------------);输出:原字典修改后:{1:11,u...