python 深浅拷贝不之前一直不太理解,只是概念性的理解像 1,2 所说,敲完下面代码希望你可以理解。1、copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。2. copy.deepcopy 深拷贝 拷贝对象及其子对象>>> import copy
>>> l1 = [1,3,5,[‘a‘,‘b‘,‘c‘]]
>>> a = l1
>>> b = copy.copy(a) # 浅拷贝
>>> c = copy.deepcopy(a) # 深拷贝
>>> l1.append(7)
>>> l1[3].append(‘d‘)
>>> print ‘l1=‘,l1
l1= [1, 3, 5, ...
1.基础数据类型的补充1.元组如果元组中只有一个数据,且没有逗号,则该‘元组’与里面的数据的类型相同。如:1 tu = (1)
2 tu1 = (1,)
3 tu2 = (‘alex‘)
4 tu3 = ([1,2,3],)
5print(tu,type(tu)) # 1 <class ‘int‘>6print(tu1,type(tu1)) # (1,) <class ‘tuple‘>7print(tu2,type(tu2)) # alex <class ‘str‘>8print(tu3,type(tu3)) # ([1, 2, 3],) <class ‘tuple‘>2. 列表列表与列表是可以相加的,如:1 l1 = [1,2,...
一、基本数据类型补充1,关于int和str在之前的学习中已经介绍了80%以上了,现在再补充一个字符串的基本操作: li = [‘李嘉诚‘,‘何炅‘,‘海峰‘,‘刘嘉玲‘]s = "_".join(li)print(s) # 结果为:李嘉诚_何炅_海峰_刘嘉玲li = ‘黄花大闺女‘s = "_".join(li)print(s) # 结果为:黄_花_大_闺_女2,列表相关: 循环删除列表中的每一个元素,有如下代码,注意结果并分析原因: li = [11,22,33,44]for e in li:li.remove(e)...
首先我们在这里先补充一下基础数据类型的一些知识:一.循环删除 1.前面我们学了列表,字典和集合的一些操作方法:增删改查,现在我们来看一下这个问题:有这样一个列表:
lst = [‘周杰伦‘,‘周润发‘,‘周星驰‘,‘刘德华‘]如果现在要求我们删除带‘周‘的元素,我们下意识会这样做:lst = [‘周杰伦‘,‘周润发‘,‘周星驰‘,‘刘德华‘]
for i in lst:if ‘周‘ in i:lst.remove(i)
print(lst) #[‘周润发‘, ‘刘德华‘]但是结果...
一、浅拷贝常见的浅拷贝的方法,是使用数据类型本身的构造器,比如下面两个例子:list1 = [1, 2, 3]
list2 = list(list1)
print(list2)
print("list1==list2 ?",list1==list2)
print("list1 is list2 ?",list1 is list2)set1= set([1, 2, 3])
set2 = set(set1)
print(set2)
print("set1==set2 ?",set1==set2)
print("set1 is set2 ?",set1 is set2)
运行结果为:[1, 2, 3]
list1==list2 ? True
list1 is list2 ? False
{1, 2, 3}
s...
元组比较特殊 1、----元组本身为不可变类型import copyv1 = (1, 2, 3, 4)
v2 = copy.copy(v1)
print(id(v1), id(v2))
v3 = copy.deepcopy(v1)
print(id(v1), id(v3))输出:
31450280 31450280
31450280 31450280小结:元组本身是不可变类型,就像str、int、boor一样,所在在深浅拷贝时,它们的内存地址是一样的。2、----当元组中嵌套可变类型时:v1 = (1, 2, 3, [1, 2, 3], 4)
import copyv2 = copy.copy(v1)
print(id(v1), id(v2)...
1. 基本数据类型补充 s=" ".join(lst) 把列表中的每一项用" "拼接起来,把列表转化成字符串 lst1=s1.split() 用()中的内容切割列表,把字符串转化成列表2. 关于删除 在循环迭代的过程中不能删除 删除的方法: 创建新列表,把想要删除的内容放在列表中,循环新列表,删除原列表 字典在循环中不能增加和删除,可以修改 dict.fromkeys(k, v) 把key迭代.和value组合成k:v创建新字典, 所有的key共享同一个...
拷贝的用途拷贝就是copy,目的在于复制出一份一模一样的数据。使用相同的算法对于产生的数据有多种截然不同的用途时就可以使用copy技术,将copy出的各种副本去做各种不同的操作。值得一提的是绝大部分编程语言中对于copy都有深浅拷贝的概念,所以充分的理解本章节的知识也是在为今后学习其他编程语言少走弯路。在Python中,除开手动deepcopy(),其他的任何操作都是浅拷贝。Python = 赋值示例好了,废话不多说。直接进入主题,上代码...
Python深浅拷贝剖析Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果。下面本文就通过简单的例子介绍一下这些概念之间的差别。一、对象赋值创建列表变量Alex,变量包含子列表,通过变量Alex给变量lzl赋值,对原文:http://www.cnblogs.com/lianzhilei/p/5725172.html
list1 = ['egon', 'lxx', [1,2]]
list2 = list1 #这不叫copy 二者分隔不开,list改list2也跟着改,因为指向的就是同一个地址拷贝:拷贝指的是拷贝原列表产生新的列表(id 是不同的)浅拷贝:list1 = ['egon', 'lxx', [1,2]]
list3 = list.copy() #浅拷贝什么是浅拷贝:? 是把原列表第一层的内存地址不加区分完全 copy 一份给新列表list1=['egon','lxx',[1, 2]
]
list3 = list1.copy()
print(list3) #['egon', 'lxx', [1, 2]]
print...
转载自 Eva_J ,感谢分享https://www.cnblogs.com/Eva-J/p/5534037.html 初学编程的小伙伴都会对于深浅拷贝的用法有些疑问,今天我们就结合python变量存储的特性从内存的角度来谈一谈赋值和深浅拷贝~~~预备知识一——python的变量及其存储 在详细的了解python中赋值、copy和deepcopy之前,我们还是要花一点时间来了解一下python内存中变量的存储情况。 在高级语言中,变量是对内存及其地址的抽象。对于python而言,p...
一、浅拷贝浅拷贝: 只是复制最外层的结构,除最外层其余的直接将其地址引用过来,原始数据和拷贝后数据修改会互相影响。1、定义数据a作为原始对象,b作为a的浅拷对象,可以看到b是重新开辟了一块内存地址。 2、修改外层结构修改原始对象a的外层结构,观察b的变化 可以看到a修改了外层结构,但是b并没有改变,所以说只是复制了最外层的结构。同理修改b也不会影响a: 3、修改内层子对象修改拷贝对象的内部的子对象[3,4] 发现修改...
需要知识准备,pyhton基本常识,python的小数据池概念。深浅拷贝操作需要模块导入:import copyemmm,对于python中的两种数据类型来说。1、数字,字符串2、列表,元祖,字典等 浅拷贝:a = copy.copy(b)如果b是第一种数据类型。a,b的内存地址一致。如果b是第二种数据类型,拷贝后,a与b的第一层内存地址不同。也就是说id(a) != id(b),但a,b内元素的内存地址依然一致。 深拷贝:a = copy.deepcopy(b)如果b是第一种数据类型,拷贝后...
深浅拷贝变量赋值相当于贴标签浅拷贝#在同一代码块下:
a1 = [1,2, [3,1]]
b1 = a1.copy()b1相当于在内存中重新开辟了一块新的内存地址,与a1不的id不同.不过其内部元素引用是公用的# 在不同代码块下:
也是同理
深拷贝# 同一代码块下
import copy
l1 = [1, ‘alex‘, True, (1,2,3), [22, 33]]
l2 = copy.deepcopy(l1)
print(id(l1), id(l2)) # 2788324482440 2788324483016 #
print(id(l1[0]),id(l2[0])) # 1470562768 147056276...
之前一直认为浅拷贝是拷贝内容的第一层,但是不开辟内存,只是增加新的指向原来的内容;深拷贝是拷贝是拷贝每一层并开辟内存。其实这个是不严谨的不正确的。 从以上可以看出,浅拷贝中当时可变类型的时候,内存是发生了变化的,也就是开辟了内存,但是不可变类型的时候内存地址不发生变化的。总结:浅拷贝是对数据的内容进行拷贝,对不可变类型创建指向引用,可变类型开辟内存存储,但是只是拷贝第一层。深拷贝是拷贝数据的每一...