小数据池,基础类型的补充
Posted guoqiming
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小数据池,基础类型的补充相关的知识,希望对你有一定的参考价值。
s = ‘alex‘
print(id(s)) # 获取内存地址
== 判断两个对象的值相同.
i = 100
i1 = 100
print(i == i1)
is 身份运算:判断的是两个对象的内存地址是否相同.
i1 = 10
i2 = 10
print(i1 is i2)
代码块
i = 1
i2 = 3
i3 = 4
一个文件是一个代码块.(函数,类都是一个代码块.)
交互命令中一行就是一个代码块.
同一个代码块:同一代码块的缓存机制,驻留机制.
i1 = 100
i2 = 300
i3 = 100
l1 = [1,2,3]
l2 = [1,2,3]
print(l1 is l2)
tu1 = (1,2,)
tu2 = (1,2,)
print(tu1 is tu2)
同一个代码块驻留机制的目的:
‘‘‘
1,节省内存空间.
2,提升性能.
‘‘‘
驻留机制针对的对象: int bool str ()空元组.
int: 范围 任意数字
i1 = 1212312312312312312312312
i2 = 1212312312312312312312312
print(i1 is i2)
bool True Fasle
str:几乎所有的字符串都会符合缓存机制,
s1 = ‘[email protected]#$‘
s2 = ‘[email protected]#$‘
print(s1 is s2)
通过相乘的形式构建的字符串长度不能超过20满足同一代码块的驻留机制.
s1 = ‘old_‘ * 5
s2 = ‘old_‘ * 5
print(s1 is s2) # True
不同的代码块之间: 小数据池.
小数据池是针对 不同代码块 之间的缓存机制!!!
小数据池的目的:
‘‘‘
1,节省内存空间.
2,提升性能.
‘‘‘
小数据池针对的对象: int bool str ()空元组.
int: -5 ~256
str: 一定规则的字符串
总结
‘‘‘
如果在同一代码块下,则采用同一代码块下的换缓存机制。
如果是不同代码块,则采用小数据池的驻留机制。
‘‘‘
i1 = 1000
i2 = 1000
print(i1 is i2)
数据类型之间的转换
int bool str list tuple dict set
‘‘‘int bool str 三者转化是可以的.‘‘‘
bool 可以与所有的数据类型进行转换.
所有为空的数据类型转化成bool都为Fasle.
0 ‘‘ [] () {} None ----> Fasle
print(bool([])) # False
str ---> list split 分割
list ---> str join # list里面的元素全部都是str类型
l1 = [‘武sir‘, ‘alex‘, ‘太白‘]# print(‘ ‘.join(l1))
str ----> tuple # partition
tuple ---> str join
tu1 = (‘武sir‘, ‘alex‘, ‘太白‘)
ret = ‘ ‘.join(tu1)
print(ret,type(ret))
list<----->tuple
l1 = [‘武sir‘, ‘alex‘, ‘太白‘]
print(tuple(l1))
tu1 = (‘武sir‘, ‘alex‘, ‘太白‘)
print(list(tu1))
dict ----> list
dic = {‘name‘:‘alex‘,‘age‘: 73}
print(list(dic))
set list 转化 下午讲.
tuple: 如果元组中只有单个元素并且没有 , 则类型是元素本身的类型.
tu1 = (1)
tu1 = (‘alex‘,)
print(tu1,type(tu1))
dict
dic = {‘name‘:‘alex‘,‘age‘: 73}
dic[‘money‘] = ‘10万‘
print(dic)
dic = dict.fromkeys([1,2,3],‘太白‘)
dic = dict.fromkeys(‘abcd‘,‘太白‘)
dic = dict.fromkeys(‘abcd‘,[1,])
坑: 如果你的值是一个可变的数据类型, 他在内存中是一个.id相同.
dic = dict.fromkeys(‘abcd‘,[])
dic[‘a‘].append(666)
dic[‘b‘].append(111)
dic[‘c‘].append(222)
print(dic)
l1 = [1,2,3]
l2 = l1
l3 = l2
l1.append(666)
l2.append(111)
print(l1)
l1 = [11, 22, 33, 44, 55]
将此列表索引为奇数位对应的元素全部删除.
方法一:
del l1[1::2]
print(l1)
方法二:错误示例:
循环一个列表时,不要改变列表的大小.这样会影响你最后的结果.
for index in range(len(l1)):
if index % 2 == 1:
# index 奇数
l1.pop(index)
print(l1)
方法三
new_l = []
for index in range(len(l1)):
if index % 2 == 0:
new_l.append(l1[index])
print(new_l)
l1 = new_l
print(l1)
方法三:
for index in range(len(l1)-1,-1,-1):
if index % 2 == 1:
l1.pop(index)
print(l1)
循环一个列表时,最好不要对原列表有改变大小的操作,这样会影响你的最终结果.
dic = {‘k1‘: ‘v1‘, ‘k2‘: ‘v2‘, ‘k3‘: ‘v3‘, ‘name‘: ‘alex‘}
将字典中的key中含有k元素的所有键值对删除.
dictionary changed size during iteration
for key in dic:
if ‘k‘ in key:
dic.pop(key)
print(dic)
l1 = []
for key in dic:
if ‘k‘ in key:
l1.append(key)
print(l1)
for key in l1:
dic.pop(key)
print(dic)
循环一个字典时,不能改变字典的大小,这样会报错.
以上是关于小数据池,基础类型的补充的主要内容,如果未能解决你的问题,请参考以下文章