gpt4 book ai didi

python - 根据分配方法对返回不同输出的字符串进行身份检查

转载 作者:太空宇宙 更新时间:2023-11-04 03:42:10 26 4
gpt4 key购买 nike

我知道如果字符串以字母或下划线开头并且仅包含字母、下划线或数字,Python 会保留某些字符串并创建哈希,如 Martijn Pieters codementor interview 中所示.

当单独分配 s = "$foo"s1 = "$foo" s is s1 返回 False 按预期但使用 s, s1 = "$foo", "$foo" s is s1 返回 True

为什么 python 使用不同的赋值会表现不同?

In [1]: s, s1 = "$foo", "$foo"    
In [2]: s is s1
Out[2]: True
In [3]: s1 = "$foo"
In [4]: s = "$foo"
In [5]: s is s1
Out[5]: False

最佳答案

正如 Martijn Pieters 在您提到的文章中所说:

if a string starts with a letter or an underscore and only contains letters, underscores, or numbers, Python will intern the string

您的特定字符串包含 $,因此它不会被驻留 - 这里发生的事情与字符串驻留无关。

发生的事情是解释器看到您创建了两个对相同不可变对象(immutable对象)的引用。由于对象类型是不可变的,因此简单的优化不是创建两个对象,而是简单地选择重用一个对象。

检验我们的理论:

In [41]: a=1000

In [42]: b=1000

In [43]: a is b
Out[43]: False

In [44]: a,b=1000,1000

In [45]: a is b
Out[45]: True

请注意,这只会发生,因为交互式解释器必须编译(和评估)您分别输入的每一行。如果将这些语句放入脚本并执行它,结果将完全不同,因为编译器会处理整个代码并注意到它:

a=1000
b=1000

print a is b

a,b=1000,1000

print a is b

输出:

True
True

关于python - 根据分配方法对返回不同输出的字符串进行身份检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25849152/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com