加入收藏 | 设为首页 | 会员中心 | 我要投稿 商洛站长网 (https://www.0914zz.com/)- AI应用、CDN、边缘计算、云计算、物联网!
当前位置: 首页 > 编程开发 > Python > 正文

python C 运算符混淆

发布时间:2023-12-16 22:29:59 所属栏目:Python 来源:DaWei
导读: 运算符是比较两个对象的内存地址(如果它们相同),则返回true,否则返回false.

代码#1


>>a="poi"
>>b="poi"
a is b
true
我创建了两个对象,其内容相同,但它们完全位于不同的内存

运算符是比较两个对象的内存地址(如果它们相同),则返回true,否则返回false.
代码#1 >>a="poi" >>b="poi" a is b true

我创建了两个对象,其内容相同,但它们完全位于不同的内存地址上.
那么为什么运算符返回true?不应该返回虚假.
就像这段代码一样

>>ktr = "today is a fine day" >>ptr = "today is a fine day" >>ktr is ptr false 解决方法 我认为它与 string interning.有关本质上,我们的想法是只存储每个不同字符串的单个副本,以提高某些操作的性能.

基本上,a是b工作的原因是因为(正如你可能已经猜到的)在两种情况下都有一个由Python引用的不可变字符串.当一个字符串很大(以及其他一些我不理解的因素时,很可能),这没有完成,这就是你的第二个例子返回False的原因.

编辑:事实上,奇怪的行为似乎是交互式环境的副作用.如果你使用相同的代码并将其放入Python脚本中,则a和b都是ptr和ptr返回True.

a="poi" b="poi" print a is b # Prints 'True' ktr = "today is a fine day" ptr = "today is a fine day" print ktr is ptr # Prints 'True'

这是有道理的,因为Python很容易解析源文件并在其中查找重复的字符串文字.如果动态创建字符串,那么即使在脚本中它也会有不同的行为.

a="p" + "oi" b="po" + "i" print a is b # Oddly enough,prints 'True' ktr = "today is" + " a fine day" ptr = "today is a f" + "ine day" print ktr is ptr # Prints 'False'

至于为什么a仍然是结果为True,或许分配的字符串足够小以保证快速搜索实习集合,而另一个不是?

(编辑:商洛站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章