python中变量缓存机制是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
只要有两个值相同,就只开辟一个空间
为什么要有这样的机制
在计算机的硬件当中,内存是最重要的配置之一,直接关系到程序的运行速度和流畅度。在过去计算机内存资源昂贵而小的年代中,程序的内存管理成为编程中的重要技术之一.python没有C/c++中的指针那样的定义可以编程者自主的控制内存的分配,而是有一套自动的内存地址分配和缓存机制。在这个机制当中,可以把一些相同值的变量在内存中指向同一块区域,而不再重新开辟一个空间,这样就达到了节省内存的目的。
python中使用id()函数查看数据的内存地址
数部分
整型
对于整型而言,5 ~ ~正无穷的范围内的相同值的id地址一致
#,在后续的版本中所有的数的id地址都一致 #,相同 打印(id (9999999), id (9999999)) 打印(id (100), id (100)) 打印(id (5), id (5)) #,不同 打印(id (6), id (6))
浮点型
对于浮点型而言,非负数范围内的相同值id一致
#,相同 打印(id (9999999.0),, id (9999999.0)) 打印(id (100.0),, id (100.0)) #,不同 打印(id (-5.0),, id (-5.0)) 打印(id (-6.0),, id (-6.0))
布尔值
对于布尔值而言,值相同测情况下,id一致
#,相同 打印(id(真正的),身份证(真正的)) 打印(id (False), id(假))
复数
复数在(实数+虚数)这样的结构当中永不相同,只有单个虚数相同才会一致
#,相同 打印(id (1 j), id (1 j)) 打印(id (0 j), id (0 j)) #,不同 打印(id (1234 j), id (3456 j)) 打印(id (1 + 1 j),身份证(1 + 1 j)) 打印(id (2 + 0 j),身份证(2 + 0 j))
容器部分
字符串
字符串在相同的情况下,地址相同
#,相同 打印(id (& # 39; hello & # 39;),, id (“hello “)) #,不同 打印(id (& # 39; msr # 39;),, id (& # 39; wxd& # 39;))
字符串配合使*号使用有特殊的情况:
乘数为1:只要数据相同,地址就是相同的
#,等于1,和正常的情况下是一样的,只要值相同地址就是一样的 时间=a & # 39; hello & # 39; *, 1 时间=b & # 39; hello & # 39; *, 1 打印(a is b) 时间=a & # 39;祖国& # 39;*,1 时间=b & # 39;祖国& # 39;*,1 打印(a is b)
乘数大于1:只有仅包含数字,字母,下划线时地址是相同的,而且字符串的长度不能大于20
#,纯数字字母下划线,且长度不大于20 时间=a & # 39; _70th& # 39; *, 3 时间=b & # 39; _70th& # 39; *, 3 时间=c & # 39; _70th_70th_70th& # 39; 打印(a,, id (a),, len (a)) print (b, id (b), len (b)) 打印(c, id (c), len (c)) print (a is  b is c) & # 39;& # 39;& # 39; 结果: _70th_70th_70th 1734096389168, 15 _70th_70th_70th 1734096389168, 15 _70th_70th_70th 1734096389168, 15 真正的 & # 39;& # 39;& # 39;
#,纯数字字母下划线,长度大于20 时间=a & # 39; motherland_70th& # 39; *, 3 时间=b & # 39; motherland_70th& # 39; *, 3 时间=c & # 39; motherland_70thmotherland_70thmotherland_70th& # 39; 打印(a,, id (a),, len (a)) print (b, id (b), len (b)) 打印(c, id (c), len (c)) print (a is  b is c) & # 39;& # 39;& # 39; 结果: motherland_70thmotherland_70thmotherland_70th 2281801354864, 45 motherland_70thmotherland_70thmotherland_70th 2281801354960, 45 motherland_70thmotherland_70thmotherland_70th 2281801354768, 45 假 & # 39;& # 39;& # 39;
#,有其它字符,且长度不大于20 时间=a & # 39;你好& # 39;*,3 时间=b & # 39;你好& # 39;*,3 时间=c & # 39;你好你好你好& # 39; 打印(a,, id (a),, len (a)) print (b, id (b), len (b)) 打印(c, id (c), len (c)) print (a is  b is c) & # 39;& # 39;& # 39; 结果: 你好你好你好,3115902573360,6 你好你好你好,3115902573448,6 你好你好你好,3115900671904,6 假 & # 39;& # 39;& # 39;python中变量缓存机制是什么