【python3系列文章(1):直接复制、浅拷贝和深度拷贝】教程文章相关的互联网学习教程文章

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中的赋值和深浅拷贝

赋值 在python中,赋值仅仅是复制了对象的引用,并没有开辟内存空间 a = 1 b = a 上述代码只是把a的引用复制给了b,结果是a和b同时指向1 对于可变对象 a = [1, 2, 3] b = a b.append(4) 结果a和b都变成了 [1, 2, 3, 4]浅拷贝(shadow copy) 浅拷贝会创建新对象,其内容不是原对象本身的引用,而是原对象内第一层对象的引用。 浅拷贝有三种形式 切片操作 b = a[:] 或者b = [x for x in a]; a = [1, 2, ['a', 'b', [10, 20]]]# 切片,...

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...

学习python--第八天(直接赋值、浅拷贝和深度拷贝解析)

直接赋值:其实就是对象的引用(别名)。浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。--只拷贝第一层深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。--克隆一份

Python深浅拷贝详解【图】

一、浅拷贝 浅拷贝,记住一点,浅拷贝不管多复杂,只copy第一层,看图说话。1、定义源列表list_s,列表list_c,并进行拷贝操作,查看两列表的值相等,如下图所示。 2、现在源列表list_s数据更改,增加数值list_s.append(3),list_s数值改变,而列表list_c的值不变,如下图所示。3、现在list_c数据更改,增加数值list_c.append(4),list_c数值改变,而源列表list_s的数值保持不变,如下图所示。由以上三步操作可以看出,源list_s里面...

Python中的赋值与深浅拷贝【代码】【图】

鉴于对很多初学编程的小伙伴来说,对于赋值和深浅拷贝的用法有些疑问,所以我就结合python变量存储的特性从内存的角度来谈一谈赋值和深浅拷贝~~~ 准备知识一些基本的定义:在Python中对象的赋值其实就是对象的引用。当创建一个对象,把它赋值给另一个变量的时候,python并没有拷贝这个对象,只是拷贝了这个对象的引用而已。 浅拷贝:拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已。也就是,把对象复制一遍,但是该对...

Python 拓展之详解深拷贝和浅拷贝【代码】

正式开始 首先我在这介绍两个新的小知识,要在下面用到。一个是函数 id() ,另一个是运算符 is。id() 函数就是返回对象的内存地址;is 是比较两个变量的对象引用是否指向同一个对象,在这里请不要和 == 混了,== 是比较两个变量的值是否相等。 >>> a = [1,2,3] >>> b = [1,2,3] >>> id(a) 38884552L >>> a is b False >>> a == b True copy 这个词有两种叫法,一种是根据它的发音音译过来的,叫拷贝;另一种就是标准的翻译,叫复制...

python深浅拷贝【代码】

一.深浅拷贝 1. = 没有创建新对象, 只是把内存地址进行了复制1 从上到下只有一个列表被创建 2 lst1 = ["胡辣汤", "灌汤包", "油泼面", "麻辣香锅"] 3 lst2 = lst1 # 并没有产生新对象. 只是一个指向(内存地址)的赋值 4 print(id(lst1)) 5 print(id(lst2)) 6 7 lst1.append("葫芦娃") 8 print(lst1) 9 print(lst2) 2. 浅拷贝 lst.copy() 只拷贝第一层.1 lst1 = ["胡辣汤", "灌汤包", "油泼面", "麻辣香锅"] 2 lst2 = lst1.copy()...

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

直接赋值:其实就是对象的引用(别名)。浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象,而是直接引用,也就是类似于添加了一个链接而已,两个变量指向的是同一块内存地址。深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。是会开辟一个新的内存,存放数据,就是两块不同内存。import copy li = [1,1,2,3,4,5,6,7,7,8] #li2=li #两个list地址是一样的,称为浅拷贝 # li2=li[:] #复制成一个新...

python~深拷贝和浅拷贝(3)

import copy a = [11, 22, 33] b = [44, 55, 66] c = (a, b) e = copy.copy(c) id(c) = 52132936 id(e) = 52132936 原因: 使用copy.copy方法只能浅拷贝元组 只能用copy.deepcopy方法进行深拷贝 元组是不可变数据类型

python入门之三元运算,存址方式,深浅拷贝

三元运算 格式:name = 值1 if 条件 else 值2如果条件为True,那么将值1赋值给name,条件为False,那么将值2赋值给name 存址方式不同的数据类型在内存中的存址方式不同列表和字符串的区别:内存中,列表的每个元素占据一个内存空间,没有固定的元素数量限制,每个元素空间之间存在一种链表来记录单个元素空间的上一个元素和下一个元素地址,所以可以不用连续存储,有链表的存在,即使不连续存储,也是有序的。所以对于列表一些函...

python引用和对象,浅拷贝和深拷贝【代码】

关键: 在python中的分为 可变数据对象(列表,字典) 和 不可变数据对象(整型,字符串,浮点型,元祖)。 可变的意思是引用之间会相互影响,不可变则不会相互影响。 如果是可变对象的话就算是函数参数传递也会相互影响,即函数内部对对象的操作也会影响函数外部的l = [1,2,3]def func(t):t[0] = 100func(l)print(l)out: [100, 2, 3]具体的: http://www.cnblogs.com/ShaunChen/p/5656971.html (引用和对象的理解) https://www.cnbl...

PYTHON3 - 相关标签