s1=input('输入第一个')
s2=input('输入第二个')
# print(s1==s2)
print(id(s1))
print(id(s2))
print(type(s1))
print(s1 is s2)
当输入s1和s2为q时:
输入第一个q
输入第二个q
2321683913952
2321683913952
<class ‘str’>
True
当输入一个字节的值时,如a—z,1—9。他们的id相同,也就是内存地址相同。
最后那个True也是证明
当输入s1和s2为a1时:
输入第一个a1
输入第二个a1
1944362119664
1944362119552
<class ‘str’>
False
最后一个是False,和他们的id也是不相同的,
我猜想:当系统为s1开辟内存时,发现他是一个字节,就把他丢进了”字节池“,并给了它一个地址编号。而检测到s2也为字节时,就去”字节池"中查找,找到了同一个字节时,就给了他那个地址编号。并没有重新开辟一块空间。
重复开辟空间会造成内存浪费。所以这样对于字符串中,起到了一定的内存优化。
当然这是字符串的,还有整形的内存优化。
s1=int(input('输入第一个'))
s2=int(input('输入第二个'))
# print(s1==s2)
print(id(s1))
print(id(s2))
print(type(s1))
print(s1 is s2)
当输入[-5,256]之间的数字的时候:
输入第一个-5
输入第二个-5
1647996192
1647996192
<class ‘int’>
True
输入第一个-6
输入第二个-6
2372815266928
2372815269616
<class ‘int’>
False
输入第一个256
输入第二个256
1648004544
1648004544
<class ‘int’>
True
输入第一个257
输入第二个257
2315299431536
2315299434224
<class ‘int’>
False
显示为true的答案,起到了内存复用的效果,会优化内存。