Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python:字符串在内存中的存在方式_Python_Python 2.7 - Fatal编程技术网

python:字符串在内存中的存在方式

python:字符串在内存中的存在方式,python,python-2.7,Python,Python 2.7,如果字符串以正常方式保留在内存中,如何解释这种情况 s1=';;' s2=';;' s1==s2,s1 is s2 (True, False) s1=';' s2=';' s1==s2,s1 is s2 (True, True) 在第一种情况下,s1和s2具有相同的值,但不是相同的实例 在第二种情况下,s1和s2也具有相同的值,但由于它们只是单个字符串,并且每个字符都与自身相同,Python将其解释为检查字符是否是相同的字符 Python之所以这样做,是因为它对小数字和单个字符使用缓存 您可

如果字符串以正常方式保留在内存中,如何解释这种情况

s1=';;'
s2=';;'
s1==s2,s1 is s2
(True, False)

s1=';'
s2=';'
s1==s2,s1 is s2
(True, True)

在第一种情况下,
s1
s2
具有相同的值,但不是相同的实例

在第二种情况下,
s1
s2
也具有相同的值,但由于它们只是单个字符串,并且每个字符都与自身相同,Python将其解释为检查字符是否是相同的字符

Python之所以这样做,是因为它对小数字和单个字符使用缓存


您可以阅读更多内容,特别是。

==
运算符检查值是否相等

is
检查两个实体是否指向同一内存位置

现在,如果实体本质上是相同的对象,如
s1=s2=“;”
,则
s1是s2
将为真。这很容易理解

但我们直觉地认为,两个单独初始化的实体将具有不同的存储位置。但事实并非总是如此


为了提高性能,当我们创建int(对于某些范围的值)、string(同样对于某些范围)时,python只返回对现有对象的引用。

某些语言缓存某些对象。Python也可以缓存一个符号字符串。等等,这与您的基本不一样吗?您是否试图问CPython根据什么规则决定对字符串进行内部缓存?请参阅以了解该特定问题。请注意,这是CPython实现的详细信息。实际上Python缓存的不仅仅是单个字符字符串。试试这个例子:`a='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;b=‘aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;a是b#真奇怪,如果常量字符串包含非alphanum字符,它不会被缓存。@lcfseth字符串文本也会被缓存,它们会被创建一次并由字节码引用。我不确定这是否适用于整个模块。我读过一篇关于python内存管理的理论,它说只有256字节的内存才能自行使用,而在缓存接收器中分配的内存不足256字节,那么这个呢:s2='ufysdjkhflakjhsdjkfhasdhfoqwhefulskdjwuioehfjkasdhjkasdhjjkfhasdhfoqwhefulskdjhwuioehfjkasdhjjjjwade's1==s2,s1是s2(真的,真的)s1='flashmanfdsafsdffgj;djg;alkjdfgl;kajdfl;gjkla;dfjg;lakdfj;'s2='FlashManFDSAFSDFFGJ;djg;alkjdfgl;kajdfl;gjkla;dfjg;lakdfj;'s1==s2,s1是s2(对,错)我对此感到困惑~