pyhton中的深浅copy】的更多相关文章

深浅拷贝:数据分离情况 1. =赋值:数据完全共享(指向内存中的同一个对象)被赋值的变量指向的数据和原变量的数据都是指向内存中的同一个地址: (1)如果是不可变数据类型(数字.字符串等),修改其中的一个值,实际是修改了变量指向与值对应的地址(相当于重新被赋值),因此不会同时发生变化: (2)如果是可变数据类型(列表.字典等),在修改数据时仅仅是其本身的地址指向发生了改变,但是指向可变数据类型的地址并未改变,因此会同时发生改变. print("以下是赋值") a=[1,2,",…
列表中的赋值和平常的赋值是不一样的,看下面的代码: In [1]: a = 1 In [2]: b = a In [3]: a Out[3]: 1 In [4]: b Out[4]: 1 In [5]: id(a) Out[5]: 4452948992 In [6]: id(b) Out[6]: 4452948992 In [7]: id(1) Out[7]: 4452948992 In [8]: a = 4 In [9]: b Out[9]: 1 In [10]: id(a) Out[10]:…
https://www.cnblogs.com/Eva-J/p/5534037.html 转自Eva_J  分析的特别好…
一.python中的变量及引用 1.1 python中的不可变类型: 数字(num).字符串(str).元组(tuple).布尔值(bool<True,False>) 接下来我们讲完后你就懂了为什么它们是不可变对象了. 都知道python中一切都是对象,而变量就是这些对象的引用,什么意思呢 综合表述: 变量是一个系统表的元素,拥有指向对象的连接的空间 对象是被分配的一块内存,存储其所代表的值 引用是自动形成的从变量到对象的指针 特别注意: 类型属于对象,不是变量 >>> c…
一.代码块及其缓存机制 代码块 一个模块.一个函数.一个类.一个文件等都是一个代码块:交互式命令下,一行就是一个代码块. 同一个代码块内的缓存机制(字符串驻留机制) 机制内容:Python在执行同一个代码块的初始化对象的命令时,会检查是否其值是否已经存在,如果存在,会将其重用,即将两个变量指向同一个对象.换句话说:执行同一个代码块时,遇到初始化对象的命令时,他会将初始化的这个变量与值存储在一个字典中,在遇到新的变量时,会先在字典中查询记录,如果有同样的记录那么它会重复使用这个字典中的之前的这个值…
本次内容: 元祖 字典 浅copy和深copy 集合 文件处理 1.1元祖 元祖(tuple)与列表类似,不同之处在于元祖的元素不能修改,元祖使用小括号(),列表使用方括号[].元祖创建很简单,只需要在括号中添加元素,并使用逗号隔开即可. 创建元祖 name = ('xiaojian','yangjian','while','yj') name1 = ('xiaojian',) #元祖只有一个元素时,需要加逗号(,) kong = () #创建一个空元祖 元祖与列表类似,下标索引从0开始,可以进…
深浅copy以及赋值 对于字符串和数字而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. import copy n1 = #n1 = 'hahahaha' #赋值n2 = n1#浅copy n3 = copy.copy(n1) #深copyn4 = copy.deepcopy(n1)print(id(n1),id(n2)) #打印内存地址5787536 5787536print(id(n1),id(i3))5787536 5787536print(id(n1),id(n4))57…
 一.collections系列: collections其实是python的标准库,也就是python的一个内置模块,因此使用之前导入一下collections模块即可,collections在python原有的数据类型str(字符串), int(数值), list(列表) tuple(元组), dict(字典)的基础之上增加一些其他的数据类型即方法,具体如下: 1.Counter(dict):计数器,扩展的字典的方法,对指定数据的字串做统计出现的次数,结果是一个元组,如: import co…
三元运算符通常在Python里被称为条件表达式,这些表达式基于真(true)/假(not)的条件判断,在Python 2.4以上才有了三元操作. 语法格式: X if C else Y 有了三元表达式,你只需一行就能完成条件判断和赋值操作: x, y = 3, 4 if x<y : smaller= x else smaller =y 现在 只需一句: smaller = x if x<y else y 基本数据类型补充之 set set集合,是一个无序且不重复的元素集合. class set…
编码,深浅copy encode,decode在python2中使用的一些迷糊,python3中更容易理解 要理解encode和decode,首先我们要明白编码,字符和二进制的相关概念,简单来说,计算机的产生和设计只能进行二进制的运算,聪明的先辈们发明了ASCii编码用不同的二进制来表示不同英文字符实现.后来由于各国计算机的普及和推广,由于语言的原因产生了:Unicode,GB2312,UTF-8等不同的字符编码集. 在python3中对字符数据是使用的str类型,二进制数据使用的是bytes.…
一:关于str 的操作方法补充 1,s.isspace()   判断字符串是否只由空格组成,是,为True,否则,为False. s = ' ' #只能是以至少一个空格组成的字符串(全空格) print(s.isspace()) 二:关于tuple类型的补充 当元组只有一个元素组成并且没有逗号,则该元素是什么数据类型,整体就是什么数据类型. tu = ('alex') tu1 = ('alex',) print(tu,type(tu)) print(tu1,type(tu1)) tu = ([1…
一.基础数据类型汇总补充 list  在循环一个列表时,最好不要删除列表中的元素,这样会使索引发生改变,从而报错(可以从后向前循环删除,这样不会改变未删元素的索引). 错误示范: lis = [,,,,] for i in range(len(lis)): print(i) # i = i = i = del lis[i] print(lis) # [,,,,] [, , ] [, ] lis = [11,22,33,44,55] 取一个新的列表 lis = [11,33,55] #第一种 li…
模块之copy的功能介绍 copy主要分两种: 1.浅拷贝 2.深拷贝 赋值: 在python中赋值算特殊的拷贝,其实赋值可以理解为同一个对象有两个名字,所以当其中一个发生变化,另一个也跟着会变化. 1.浅拷贝 创建 格式:copy.copy(x) 例如:n1 = 123 print(copy.copy(n1)) >>> 123 返回值:obj #对于浅拷贝可以调用copy模块,当然也可以直接使用copy函数来执行,实际中直接使用copy函数比较常见. int拷贝 例如:n1 = 123…
一.从面向对象到Objective-C概览copy 1.面向对象: In object-oriented programming, object copying is creating a copy of an existing object, a unit of data in object-oriented programming. The resulting object is called an object copy or simply copy of the original obj…
集合set 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. 关系测试,测试两组数据之前的交集.差集.并集等关系. 1,集合的创建. set1 = set({1,2,'barry'}) set2 = {1,2,'barry'} print(set1,set2) # {1, 2, 'barry'} {1, 2, 'barry'} 2,集合的增. set1 =…
今天的目录是 1.小数据池 2.深浅copy 正文开始 1.小数据池 在说明今天的内容前,先说明一个在今天重复用到的一个知识点 ###比较’=’俩边的数据是否完全相同,以及判断一个对象的内存地址是否完全相同### #今天的内容深入研究还是很难再短时间内讲清楚,今天只是浅浅的讲一下 1.1#is判断等号俩边的数据是否相等 #id判断一个对象的内存地址是否完全相同 name ='alex' name1 ='alex1' print(id(name)) print(id(name1)) print(n…
一.内容回顾 代码块: 一个函数,一个模块,一个类,一个文件,交互模式下,每一行就是一个代码块. is == id id()查询对象的内存地址 == 比较的是两边的数值. is 比较的是两边的内存地址. 小数据池: 前提:int,str,bool 1,节省内存. 2,提高性能和效率. 小数据池是什么? 在内存中,创建一个'池',提前存放了 -5 ~256 的整数,一定规则的字符串和bool值. 后续程序中,如果设置的变量指向的是小数据池的内容,那么就不会再内存中重新创建. 小数据池与代码块的关系…
1.day 06 内容回顾 小数据池 int :-5-256 str:特殊字符 ,*20 ascii:8位 1字节 表示一个字符 unicode:32位 4个字节 , 表示一个字符 字节表示8位表示一个字节,字符表示组成的最小元素 utf-8 1个英文字母 8位 1个字节 欧洲 16位 两个字节 表示一个字符 亚洲 24位 三个字节 表示一个字符 gbk 1个英文字母 8位,1个字节 亚洲 16 位 两个字节表示一个字符 s = 'alex' b = s.encode('utf-8') prin…
1 小数据池(节省内存) 只有数字和字符串中内存,储存在同一个内存地址中 数字的范围在-5~256中,字符串有以下两个特点:不能含有特殊字符,还有就s*20 不是同一个地址,而要*21就不是了 2 编码 ASCii 中   英文用 8 位 ,一个字节 unicode 中   英文用 32 位 ,四个字节 中文用 32 位 ,四个字节 utf-8 中   英文用 8 位 ,一个字节 中文用 24 位 ,三个字节 gbk 中   英文用 8 位 ,一个字节 中文用 16 位 ,二个字节 特点: 各个…
本节内容: 1,深浅copy 2,数据结构 3,函数 4,变量作用域 5,返回值,return 一.深浅copy 首先理解当给变量赋值的时候,是给变量存在值所在的内存地址 a = 10000 b = 10000 a_id = id(a) b_id = id(b) print(a_id, b_id) # 当是数值,不是列表等变化的数据类型时,a=b的存储地址是相同 浅拷贝 import copy husband = ["xiaohu", [13000, 5000]] wife = hus…
1.数据类型的补充 1.1 元组 当元组里面只有一个元素且没有逗号时,则该数据的数据类型与括号里面的元素相同. tu1 = ('laonanhai') tu2 = ('laonanhai') print(tu1, type(tu1)) print(tu2, type(tu2),) tu1 = (1) tu2 = (1,) print(tu1, type(tu1)) print(tu2, type(tu2)) tu1 = ([1, 2, 3]) tu2 = ([1, 2, 3],) print(t…
一. 前言 在python中,对象的赋值和深浅copy,是有差异的.最终得的值也不同,下面我们就通过几个例子,来看下它们之间的区别. 二. 赋值 list2 = ["jack",22,["65kg","170cm"]] #对象赋值操作 list3 = list2 print("修改前list2的内存地址:",id(list2)) print("修改前list3的内存地址:",id(list3)) print…
一 . join的用法 lst =['吴彦祖','谢霆锋','刘德华'] s = '_'.join(lst) print(s) # 吴彦祖_谢霆锋_刘德华 # join() "*".join("吴彦祖") # 吴*彦*祖 把传递进去的参数进行迭代. 获取到的每个元素和前面的*进行拼接. 得到的是字符串 split() 切割. 切割的结果是列表 二 . 对正在循环的列表或者字典的删除方法 列表和字典: 都不能在循环的时候直接删除 把要删除的内容记录在新列表中然后循环这…
#str s=' ' #只能是以至少一个空格组成的字符串(全空格) print(s.isspace()) #tuple 当元组只有一个元素组成,并没有",",则该元素是什么数据类型,整体就是什么数据类型 tu = (1) tu1 = (1,) print(tu,type(tu)) print(tu1,type(tu1)) #list # l1 = [111,222,333,444,555] 将索引为奇数位的元素删除 # 方法一: l1 = [111,222,333,444,555] l…
1,数据类型的补充: 元组()tuple,如果只有元素,并且没有逗号,此元素是什么数据类型,该表达式就是什么数据类型. tu = ('rwr') print(tu,type(tu)) tu = ('rwr',)#('rwr',) <class 'tuple'> print(tu,type(tu)) list列表,在循环一个列表时,最好不要进行删除动作,一旦删除,索引就会随之改变,容易出错. li = ['老男孩','alex','拉黑米','老男孩','老男孩','天上人间'] #删除索引为奇…
集合: 特点:集合是可变的数据类型,但他里面的元素必须是不可变的数据类型,无序,不可重复. 创建: set1 = set({1,2,3}) 或者直接创建set2 = {1,2,3} 集合的增删查: 增: add set1.add('女生') update set1.update('abc') #迭代,类似于列表的extend 删: pop set1.pop() #随机删除,有返回值返回的是删除的元素 remove set1.remove('2') #按元素删除 clear set1.clear(…
1.编码的进阶 字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码.即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码. decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码. encode的作用是将unicode编码转换成其他编码的字符串,如str2.enc…
一 数据类型定义及分类 我们人类可以很容易的分清数字与字符的区别,但是计算机并不能呀,计算机虽然很强大,但从某种角度上看又很傻,除非你明确的告诉它,1是数字,“汉”是文字,否则它是分不清1和‘汉’的区别的,因此,在每个编程语言里都会有数据类型,其实就是对常用的各种数据类型进行了明确的划分,你想让计算机进行数值运算,你就传数字,你想让他处理文字,就传字符串类型.以下为查看数据类型的方法. >>> a= 2**64>>> type(a) #type()是查看数据类型的方法&…
1.编码的进阶 字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码. 即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码. decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码. encode的作用是将unicode编码转换成其他编码的字符串,如str2.en…
一,格式化输出 今天主要想记录一下关于格式化输出的例子,然后结合了自己的理解,分析如下: 格式是 :百分号+占位符 主要有三种使用形式:%s  (其中s表示string)表示字符串 %d  (其中d表示digit)表示数字 %f  (其中f表示float)表示浮点小数,也称小数 其他的如下:%% 百分号标记 #就是输出一个%%c 字符及其ASCII码%d 有符号整数(十进制)%u 无符号整数(十进制)%o 无符号整数(八进制)%x 无符号整数(十六进制)%X 无符号整数(十六进制大写字符)%e…