相关疑难解决方法(0)

为什么使用'=='或'is'比较字符串有时会产生不同的结果?

我有一个Python程序,其中两个变量设置为该值'public'.在条件表达式中,我的比较var1 is var2失败了,但是如果我将其更改为var1 == var2它则返回True.

现在,如果我打开我的Python解释器并进行相同的"是"比较,它就会成功.

>>> s1 = 'public'
>>> s2 = 'public'
>>> s2 is s1
True
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

python string comparison identity equality

1076
推荐指数
13
解决办法
148万
查看次数

python sys.intern做什么,什么时候应该使用?

我遇到了关于词典内存管理的问题,提到了实习功能.它究竟做了什么,何时使用?

举个例子:

如果我有一组称为看出,包含形式的元组(字符串1,字符串),我用它来检查重复,会存储(实习生(字符串1),实习生(字符串2))提高性能WRT内存或速度?

python memory memory-management python-3.x

45
推荐指数
3
解决办法
1万
查看次数

字符串是否在Python中汇集

Python是否拥有所有字符串的池并且它们是(字符串)单例吗?

更准确地说,在下面的代码中,在内存中创建了一个或两个字符串:

a = str(num)
b = str(num) 
Run Code Online (Sandbox Code Playgroud)

python memory string singleton string-interning

10
推荐指数
2
解决办法
2917
查看次数

带有空格的Python字符串,最后没有空格和不变性

我了解到,在一些一成不变的类,__new__可能会返回一个现有实例-这是什么int,str以及tuple各类有时小的值做.

但为什么以下两个片段的行为不同?

最后有一个空格:

>>> a = 'string '
>>> b = 'string '
>>> a is b
False
Run Code Online (Sandbox Code Playgroud)

没有空间:

>>> c = 'string'
>>> d = 'string'
>>> c is d
True
Run Code Online (Sandbox Code Playgroud)

为什么空间带来了差异?

python string cpython immutability python-internals

9
推荐指数
2
解决办法
408
查看次数

在Python中,为什么单独的字典字符串值通过"in"相等检查?(字符串实习)

我正在构建一个Python实用程序,它将涉及将整数映射到字符串,其中许多整数可能映射到相同的字符串.根据我的理解,默认情况下Python实习短字符串和大多数硬编码字符串,因此通过在表中保留字符串的"规范"版本来节省内存开销.我认为我可以通过实习字符串值从中受益,即使字符串实习更多地用于密钥散列优化.我写了一个快速测试,它检查长字符串的字符串相等性,首先只存储列表中的字符串,然后将字符串存储在字典中作为值.这种行为对我来说意外:

import sys

top = 10000

non1 = []
non2 = []
for i in range(top):
    s1 = '{:010d}'.format(i)
    s2 = '{:010d}'.format(i)
    non1.append(s1)
    non2.append(s2)

same = True
for i in range(top):
    same = same and (non1[i] is non2[i])
print("non: ", same) # prints False
del non1[:]
del non2[:]


with1 = []
with2 = []
for i in range(top):
    s1 = sys.intern('{:010d}'.format(i))
    s2 = sys.intern('{:010d}'.format(i))
    with1.append(s1)
    with2.append(s2)

same = True
for i in range(top):
    same = same and (with1[i] is with2[i]) …
Run Code Online (Sandbox Code Playgroud)

python string dictionary string-interning python-3.x

5
推荐指数
1
解决办法
141
查看次数

Python字符串实习和子串

当您执行子串操作时,python是否会创建一个全新的字符串(复制内容):

new_string = my_old_string[foo:bar]
Run Code Online (Sandbox Code Playgroud)

或者它是否使用实习来指向旧数据?

作为澄清,我很好奇底层字符缓冲区是否像Java一样共享.我意识到字符串是不可变的,并且总是看起来是一个全新的字符串,它必须是一个全新的字符串对象.

python

4
推荐指数
2
解决办法
1107
查看次数