小编给大家分享一下Python中与==是什么有什么区别,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!
先了解下官方文档中关于和==的概念是表示的是对象标示符(对象的身份),而==表示的是相等(平等);是的作用是用来检查对象的标示符是否一致,也就是比较两个对象在内存中的地址是否一样(相当于检查id (a)==id (b)),而==是用来检查两个对象引用的值是否相等(相当于检查a.eq (b));这点和Java有点类似,只不过Java中是用==来比较两个对象在内存中的地址,用=()来检查两者之间的值是否相等。
Python中的字符串采用了实习生机制,当需要值相同的字符串的时候(比如标识符),可以直接从字符串池里拿来使用,避免频繁的创建和销毁,提升效率和节约内存,因此拼接和修改字符串是会比较影响性能的。因为是不可变的,所以字符串的操作都不是替换,而是新建对象,这也是为什么拼接多字符串的时候不建议用+而用加入(),加入()是先计算出所有字符串的长度,然后再拷贝,只新一次对象。需要注意的是,并不是所有的字符串都会采用实习生机制,当且仅当只包含下划线,数字,字母的字符串才会被实习生。
<强>示例一强>
a =,“hello" 时间=b “hello" 打印(a is b),, #,输出,True 打印(==a b),, #,输出,真正的
值相同的简单字符串对象在字符串池里只会保存一份,这决定了字符串必须是不可变对象,所以a和b是同一个对象。
引用><强>示例二强>
a =,“hello world" 时间=b “hello  world" 打印(a is b),, #,输出,假的 打印(==a b),, #,输出,真正的a和b中都有空格,所以不会被实习生(空格不是python标识符),故a和b不是同一个对象。注意,这仅仅是在交互式命令行中执行,而在PyCharm或者保存为文件执行,结果是不一样的,主要是因为解释器做了一部分优化。
引用><强>示例三强>
a =, & # 39; ab # 39;, +, & # 39; c # 39;, is & # 39; abc # 39; print(),, #,输出,真的 时间=ab & # 39; ab # 39; +=b ab & # 39; c # 39;, is & # 39; abc # 39; 打印(b),, #,输出,假第一个& # 39;ab # 39; + & # 39; c # 39;是在编译时(编译期)求值的,被替换成了& # 39;abc # 39;,所以输出为真;第二个示例,ab + & # 39; c # 39;是在运行时(运行期)拼接的,导致没有被自动实习生。
引用><强>示例四强>
a =, (1, 2, 3] b =, (1, 2, 3] 打印(a is b),, #,输出,假的 打印(==a b),, #,输出,真正的a和b是列表,不是同一个对象。
引用><强>示例五强>
a =, (1, 2, 3] b =, 打印(a is b),, #,输出,True 打印(==a b),, #,输出,真正的把的引用复制给b(引用赋值),在内存中其实是指向同一个对象。
引用><强>示例六强>
a =,(“我,,“love",,“Python"】 b =, [:] 打印(a is b),, #,输出,假的 打印(==a b),, #,输出,真的 打印([0],is b[0]),, #,输出,真的 打印([0],==,b[0]),, #,输出,真正的b通过切片操作重新分配了对象(切片赋值),但值和一个相同。由于切片拷贝是浅拷贝,这说明列表中的元素并未重新创建,因此b[0]是[0]输出为真的。
引用><强>示例七强>
a =1 b =1 打印(a is b),, #,输出,真的 打印(==a b),, #,输出,真正的Python会对比较小的整数对象进行缓存,下次用的时候直接从缓存中获取。
引用><强>示例八强>
a =320 b =320 打印(a is b),, #,输出,假的 打印(==a b),, #,输出,真正的Python仅仅对比较小的整数对象进行缓存(范围为范围[256]),而并非是所有整数对象。注意,这仅仅是在交互式命令行中执行,而在PyCharm或者保存为文件执行,结果是不一样的,主要是因为解释器做了一部分优化。
Python中与==是什么有什么区别