python-day6-缓存机制及驻留机制,数据类型的坑

1.小数据池

2.数据类型的坑

 

1.小数据池

1.1 id和is的区别:

id():获得数据的内存地址(python中的内存地址不是内存中的那个)

is:比较数据是不是相同的内存地址

== :比较两边数据是否相等

注:内存地址相同:值一定相等,内存地址不同:值不一定相等

#整型数据只有-5至256的数据跨代码块,内存地址相同

1.2 代码块 

1. python一个模块,一个函数,一个类,一个文件等都是一个代码块。

2.交互方式的python每条语句都是一个代码块

1.3 代码块的缓存机制

好处:

  1.节省了内存空间

  2.提高了效率(不用重复的为小数据开辟空间删除数据)

缓存机制的适用范围:

  int,bool,str(几乎所有符合),()空元祖

str不符合缓存机制的地方:

a = 'asdf' * 5
b = 'asdf' * 5
print(a is b)
# True
a = 'asdf' * 6
b = 'asdf' * 6
print(a is b)
# False  :相乘字符串大于20长度的字符串

1.4小数据池

小整数缓存机制,又称驻留机制。

小数据池是针对不同代码块之间的缓存机制。

范围:

int:-5至256

str:一定范围和代码块的范围好像一样

好处:

  和代码块相同。

 

2.数据类型的坑

2.1删除列表元素的坑

注:循环列表时候,不要改变列表大小,否则会影响结果。

倒序删除法:  #解决删除对循环列表的影响

l1 = [11, 22, 33, 44, 55]
index = len(l1) - 1
while index >= 0:
    if index % 2 == 1:
        del l1[index]
    index -= 1
print(l1)

2.2删除字典key的坑

注:循环字典时候,不能改变字典的大小,会报错。

    #RuntimeError: dictionary changed size during iteration

解决方式:  #把要删除的key存放到一个列表中,循环该列表进行字典的删除操作

dic = {'k1': 'v1', 'k2': 'v2',  'k3': 'v3', 'name': 'alex'}
temp = []
for i in dic:
    if 'k' in i:
        temp.append(i)   #把要删除的key添加到一个临时的列表中
print(temp)
for i in temp:     #循环该列表去删除字典内容
    dic.pop(i)
print(dic)

2.3字典方法fromkeys的坑

遍历添加key时候,如果值为空列表,所有key共用一个列表。

dic = {}
dic = dic.fromkeys('abc',[])
print(dic)
dic['a'].append('aaa')
dic['b'].append('bbb')
print(dic)
"""
{'a': [], 'b': [], 'c': []}
{'a': ['aaa', 'bbb'], 'b': ['aaa', 'bbb'], 'c': ['aaa', 'bbb']}
"""

 

转载于:https://www.cnblogs.com/zezhou/p/10489580.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值