赞
踩
一:python中可变类型数据与不可变类型数据
(1)两者区别:主要区别是用变量名对该数据类型中的数据(值)进行修改操作,是否会再创建一个新地址来储存修改后的数据类型。
2.面对一些嵌套数据类型的复杂数据类型进行修改,哪些数据类型对应的地址改变,那些对应的不改变呢?
# 可变——可变——不可变 # 第一种 列表——列表——数值 # 测试可变数据类型的元素数据类型中嵌套可变数据类型 list = [[1,2],[12],8] print(list[0]) print('原来',id(list),'可变') # 地址2612460630272 print('原来',id(list[0]),'可变')# 地址2612460310784 print('原来', id(list[0][1]),'不可变')# 地址 140730001836504 print('*'*5,"改变大楼的中楼") # 测试改变可变数据类型嵌套可变数据类型 list[0][1]=5 print(list) print('改变内部可变数据类型的值',id(list),'可变')# 地址 2612460630272 print('改变内部可变数据类型的值',id(list[0]),'可变')# 地址 2612460310784 print('我就是最小改变具体值的具体位置', id(list[0][1]),'不可变')# 地址140730001836600d
得出结论:
# 所有可变数据类型相当于可变形的布袋,里面的数据发生改变,不需要换布袋,即地址不会发生改变, # 不可变数据类型相当于是有量身定制的布袋,当你改变不可变数据类型的值时,它就换了另一个布袋(另一个地址) # 两者关系(嵌套):可变数据类型嵌套不可变数据类型,如列表嵌套数据类型(list[1,5,6])当把list[1]=2, # 这个可变数据类型列表的地址不会改变print(id(list)不会改变, # 而id(list[1]))看的是数值型地址(不可变数据类型)地址会改变,因为当你改变了这个值,那个量身定制的布袋需该改变 tip:判读该数据类型通过打印该地址里的值
3.一些疑惑的地址特殊情况:
(1):
set1= {1,3} set2= {2,5,3,1} print('交集的地方') print(id(set2 & set1)) # 地址1915277928800没有变量指向它 set5 = set() # 创建一个空集合,tip:就算不是空集合,打印结果也一样,即地址相同。 print(id(set5))# 地址1915277928800
因为只是打印set2 & set1也就是没有把它储存,所以它没有固定地址,所以当你打印set2 & set1的地址时,它会打印出这句print(id(set2 & set1))下面最近的定义的一个有地址变量的id。(如果你对这句话有疑惑,那就看看如下的代码吧!!!)
set1= {1,3} set2= {2,5,3,1} set5 = set()# 建设一个空集合 print(id(set2 & set1)) #打出2232035960736 print(id(set5)) #打出2232035961184 tip: 这时候打出来的地址不同了。
set1= {1,3} set2= {2,5,3,1} print(id(set2 & set1)) # 2264372537696 set5 = set() print(id(set5)) # 2264372537696 tip:这时候打出来的地址就相同了。
二:缓存
1.缓存概念:是指访问速度比一般随机储存器(RAM)快的一种高速存储器。通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。缓存的设置是所有现代计算机系统发挥高性能的重要因素之一。
2.缓存的缺点:
缓存雪崩:当多个缓存中的数据同时失效时,所有新的数据请求都会直接访问数据库,导致数据库压力突增,可能造成服务响应延迟甚至服务器崩溃
数据不一致:在高并发场景下,如果先写数据库再写缓存的操作不成功,可能导致数据库和缓存中的数据不一致。这是因为写缓存的操作可能失败,但数据库已经更新,导致缓存中的数据是旧的,而数据库中的数据是新的
资源浪费:每次写操作都需要写入缓存,如果缓存的计算复杂,会浪费系统资源,尤其是在写多读少的业务场景中更为明显
3.CPU读取数据:
解释:CPU优先从速度快的CPU缓存中查找数据,如果没找到,在从速度比较慢的内存中找数据,在返回给CPU,中间通过cache来调节速度问题。
4.解决缓存问题:(F5或Ctrl+5)两者是有区别的,自己查查。(注意如何按F5而不是减少亮度)。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。