七天学会Python基础-第三天1/2
标签:创建 code float == 不可变 第一个 也会 类型 作用
今日内容
-
is,==,id,的用法
- id(str),获取变量str在内存中的地址
- a==b,判断a与b是都相等,返回bool类型
- lst1 is lst2,判断str1与str2的内存地址是否相同
-
代码块
- 一个模块,一个函数,一个类,一个文件等都是一个代码块
- 交互方式输入的每个命令都是一个代码块。
- 我们所有的代码都需要依赖代码块来执行
-
两个机制:同一个代码块下,有一个机制,不同的代码块下,遵循另一个机制
-
同一代码块下的缓存机制
- 前提条件:在同一个代码块内
- 机制内容:Python在执行同一个代码块的初始化对象的命令时,会检查其值是否已经存在,如果存在,会将其重用。换句话说:在执行同一个代码块时,遇到初始化对象命令时,它会将初始化的这个变量与值存储在一个字典中,在遇到新的变量时,会先在字典中查询记录,如果有同样的记录那么他会重复使用字典中之前的这个值。所以在你给出的例子中,文件执行时(同一个代码块)会把i1,i2两个变量指向同一个对象,满足缓存机制则他们在内存中只存在一个,即id相同。
- 适用对象:int(float),str,bool
- 具体细则:所有的数字,bool,几乎所有的字符串
- 优点:提升性能,节省空间
-
不同代码块下的缓存机制(小数据池)
- 前提条件:在不同的代码块中
- 机制内容:
- Python自动将-5~256的整数进行了缓存,当你将这些整数赋值给变量时,并不会重新创建对象,而是使用已经创建好的缓存对象。
- python会将一定规则的字符串在字符串驻留池中,创建一份,当你将这些字符串赋值给变量时,并不会重新创建对象,而是使用在字符串驻留池中创建好的对象。
- 其实无论是缓存还是字符串驻留池中,都是python做的一个优化,就是将-5~256的整数和一定规则的字符串放在一个池(容器,或者字典)中,无论程序中那些变量指向这些范围内的整数或者字符串,那么他直接在这个池中引用,言外之意,就是内存之中创建一个。
- 试用对象:int(float),str,bool
- 具体细则:-2~256数字,bool,满足规则的字符串
- 优点:
-
总结:
- 面试考题:
- 回答问题一定要分清楚:同一个代码块下使用一个缓存机制,不同代码块使用另一个缓存机制(小数据池)
- 小数据池:数字的范围是-5~256
- 缓存机制的优点:提升性能,节省内存。
-
python基础类型之:集合set(了解)
- 简介
- 容器型的数据类型,他要求它里面的元素是不可变的数据,但是它本身是可变的数据类型。集合是无序的。{}
- 集合的作用
- 集合的创建
- set1=set({1,2,False,"baby"})
- set1={1,2,‘太白金星‘,‘alex‘}
- 注意:集合中的值必须为不可变的(可哈希)数据类型
- 集合的增删改查:
- 增
- set1.add(),增加单个数据
- set1.update(‘abc‘),迭代着增加
- 删
- set1.remove(‘alex‘),按照元素删除
- set1.pop(),随机删除一个元素
- 改(变相改制)
- 先把原来的元素删除,再增加一个
- set1.remove(‘男神‘)
- set1.add(‘女神‘)
- 集合的其他操作
- 交集
- set1 & set2
- set1.intersection(set2)
- 并集
- set1 | set2
- set1.union(set2)
- 差集
- set1-set2,将set2中的元素从set1中减去
- set1.difference(set2)
- 反交集
- set1^set2,得到set1和set2的并集减去set1和set2的交集
- set1.symmetric_difference(set2)
- 子集
- 超集
- set1>set2,判断set1是否是set2的超集
- set1.issuperset(set2)
-
深浅copy
-
简介:
lst1=[1,2,3]
lst2=lst1
# 此时相当于将lst1映射给lst2,若修改了其中一个,另外一个也会随之改变
# 若想让这两个列表互相不影响,就用到了copy...
-
浅copy
lst1=[1,2,3,[4,5,6]]
lst2=lst1.copy()
# 此时相当于将lst1进行了复制,粘贴给lst2,若修改了其中一个,不会影响另一个
# 此时,lst1和lst2没有关系(id不同)了,但是他们两个里面的元素指向的仍然是相同的数据(id相同)
-
深copy
- 先引入copy模块,import copy,再使用其中的deepcopy()方法进行深copy
- 深copy的特性就是将可变的数据类型在内存中重新创建一份,而不可变的数据类型沿用之前的
import copy
lst1=[1,2,3,[4,5,6]]
lst2=copy.deepcopy(lst1)
-
补充:
- enumerate(lst1,start=1),返回多个由列表的索引和元素所构成的元组,若加上start=1则元组的第一个元素从1开始,默认从0开始,应用元组的拆包即可轻松分别获得列表中的索引和元素
七天学会Python基础-第三天1/2
标签:创建 code float == 不可变 第一个 也会 类型 作用
原文地址:https://www.cnblogs.com/doubledabo/p/14779198.html
评论