python可变数据类型与不可变数据类型,以及内存地址知识感悟

一: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而不是减少亮度)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值