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

Python之深浅拷贝

预备知识 : 数据在内存中的具体存储方式 : 内存是由一个又一个字节组成,而每一个字节都有一个唯一的地址,而数据在内存中即是从地址大的字节开始存储,也即内存寻址从大到小, 以lst = [3,2,3,2,1],假定一个整数在内存中占用两个字节,在内存中的存储为例,具体如下 : 地址变量值0xffffffff0010xffffffff0020xffffffff003lst[0]30xffffffff0040xffffffff005lst[1]20xffffffff0060xffffffff007ls...

python中的深浅拷贝的区别【代码】

li = [1,1,2,3,4,5,6,7,8,9]l2=li # 这样定义不行共用内存空间,其实是一体# l2 = [1,1,2,3,4,5,6,7,8,9]l3=li[:]for i in l2: if i%2!=0: li.remove(i)print(li) # [1, 2, 4, 6, 8]print(id(li)) # 获取内存地址,li、l2 li=l2 是相同的内存地址print(id(l2))print(id(l3))# 循环删除list的时候,都会出现这样的问题# 循环的时候,不要删除元素,下标会错乱# 解决的方法是利用两个list,循环不变的list# 深拷贝 l2=l...

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深浅拷贝详解【图】

一、浅拷贝 浅拷贝,记住一点,浅拷贝不管多复杂,只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深浅拷贝【代码】

一.深浅拷贝 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入门之三元运算,存址方式,深浅拷贝

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

Python 07 深浅拷贝【代码】

Python之深浅拷贝 ?拷贝就是拷贝,何来深浅之说? Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果 其实这个是由于共享内存导致的结果 拷贝:原则上就是把数据分离出来,复制其数据,并以后修改互不影响。 先看 一个非拷贝的例子 =赋值:数据完全共享(=赋值是在内存中指向同一个对象,如果是可变(mutable)类型,比如列表,修改其中一个,另一个必定改变 如果是不可变类型(im...

python基础三(深浅拷贝)【代码】

1.赋值操作1 list_1 = [1,2,3,[barry,Jerry]] 2 list_2 = list_1 3 list_1[0] = 111 4 print(list_1) # [111, 2, 3, [barry, Jerry]] 5 print(list_2) # [111, 2, 3, [barry, Jerry]]对于赋值运算操作。list[1]与list[2]指向的是同一个内存地址。所以完全一样 2.浅拷贝1 # -------------浅拷贝---------------- 2 # 对于浅拷贝而言。第一层的创建时新的内存地址。而从第二层开始指向的都是同一块内存地址 3 list_1 = [1,2,3,[bar...

python路--深浅拷贝【代码】

深浅拷贝 s = [1,1230] s2 = s #两个变量指向同一片内存 浅copy--只拷贝第一层实例:银行中,一对夫妻两个账户,但钱是从一个地方取husband = [ xiaohu,123,[15000]] #余额wife = husband.copy() #相当于副卡wife[0] = xiaomei #账户名wife[1] = 456 #卡号深copy--全部拷贝import copy#xiaosan = copy.copy(husband) #浅拷贝xiaosan = copy.deepcopy(husband)xiaosan[0] = xiaomaomixiaosan[1] = 789xiaosan[2][0] -= 1200...

Python学习 :深浅拷贝【代码】

深浅拷贝 一、浅拷贝只拷贝第一层数据(不可变的数据类型),并创建新的内存空间进行储蓄,例如:字符串、整型、布尔除了字符串以及整型,复杂的数据类型都使用一个共享的内存空间,例如:列表列表使用的是同一个内存地址,指向原拷贝的值,即使用的是原本的内存空间 import copy #假设a为一个信用卡账号,分别存有用户名称XM、账号1001、可用额度以及余额 a=[XM,1001,[10000,8000]] #b为a的一张副卡,给他人使用用户名称XM1、账...

Python之深浅拷贝【代码】【图】

一 直接赋值 1 a = [1,2,3] 2 b = a 3 b[0] = 2 4 print(a) 5 print(b)输出:[2, 2, 3][2, 2, 3]像上面直接赋值, a为可变型变量,b=a相当于b是a的别名,b和a指向相同的地址;改变b中的值,相应的a的值也会改变。二 浅拷贝 :copy() 1 a = [[1,2],3,4] 2 b = a.copy() 3 b[1] = 2 4 print(a) 5 print(b)输出:[[1, 2], 3, 4][[1, 2], 2, 4] 1 a = [[1,2],3,4] 2 b = a.copy() 3 b[0][0] = "123" 4 print(a) 5 print(b)输出:[[...

python3之深浅拷贝【代码】【图】

深浅copy 1,先看赋值运算。 l1 = [1,2,3,[barry,alex]] l2 = l1l1[0] = 111 print(l1) # [111, 2, 3, [barry, alex]] print(l2) # [111, 2, 3, [barry, alex]]l1[3][0] = wusir print(l1) # [111, 2, 3, [wusir, alex]] print(l2) # [111, 2, 3, [wusir, alex]] 对于赋值运算来说,l1与l2指向的是同一个内存地址,所以他们是完全一样的。 2,浅拷贝copy。 l1 = [1,2,3,[barry,alex]] l2 = l1.copy() print(l1,id(l1)) # [1, ...