Достаю из файла первое слово, но оно не равняется другой такой же функции

С помощью i.split(' ', 1)[0] достаю первое слово

with open("/home/ddd/Desktop/py/Бот/mybot/data/users/money.txt", "rt") as f:
        f = f.readlines()
        for i in f:
            i = i.split(' ', 1)[0] #Тут например "Самое обычное слово"
            h = 'Самое'
            print(i is h)

По идее одно и тоже, но по факту False на выходе, как мне получить True ?


Ответы (1 шт):

Автор решения: CrazyElf

Вам в комментариях объяснили, как правильно сравнивать строки (через ==), но я вам могу показать фокус, при использовании которого строки можно сравнивать и через is:

import sys

i = "Самое обычное слово"
i = i.split(' ', 1)[0] #Тут например "Самое обычное слово"
h = 'Самое'
print(i is h)

i = sys.intern(i)
h = sys.intern(h)
print(i is h)

Вывод:

False
True

Интернизация строк - это такой механизм, который есть во многих языках программирования. Он позволяет экономить память, занимаемую строками. При обычной работе интерпретатора он не проверяет использование одинаковых строк и выделяет под них всегда новую память в процессе работы кода, даже если строки одинаковые. А если мы говорим ему интернировать строки, то он хранит у себя специальную таблицу с уникальными строками и выдаёт ссылку на строки в этой таблице, когда мы просим строку интернировать.

Использовать интернизацию имеет смысл только в том случае, если вы хотите хранить какие-то строки весь срок жизни программы и хотите избежать хранения лишних копий этих строк. В других же случаях, когда вы строки просто обрабатываете и тут же про них забываете, лучше использовать стандартные механизмы, тогда память, выделенная под эти строки, будет своевременно освобождаться.

→ Ссылка