Rahul Raj Infosys Ответов: 1

Оператор в Python


код Часть 1:

name1="rahul"
name2="rahul"



кодекс часть2:

name1=[1,2,3]
name2=[1,2,3]


Если я выполню следующий код:

print name1 is name2


Я получаю "True" для кода part1
и
Я получаю "ложь" для кода part2

почему? почему "ссылка" одинакова для name1 и name2 в "части кода 1" и отличается для name1 и name2 в "части кода 2"

1 Ответов

Рейтинг:
12

Manfred Rudolf Bihy

Это связано с тем, как Python хранит строки внутри себя. Два строковых литерала с одинаковым содержимым хранятся в одном экземпляре строки1. Так как строки являются неизменными, это ОК, чтобы сделать это. В первом примере используются строки, поэтому обе строки, созданные из одних и тех же строковых литералов, указывают на один и тот же экземпляр строки. Второй пример-с массивами. Поскольку массивы изменчивы, для каждого литерала массива создается новый экземпляр, и именно по этой причине Is оператор вернет false в последнем случае, а true-в первом.

С уважением,

— Манфред
1Это не относится к строкам, которые сконструированы так, чтобы иметь одно и то же содержимое. Смотрите эту запись SO здесь: Python '==' vs '- это "сравнение строк", это " иногда терпит неудачу, почему?[^]