TL; DR - присваивать результат операции переменной, только если результат полезен для вас.
В присваивании python выражение справа от знака равенства выполняется полностью и разрешается в один анонимный объект до того, как левая часть будет оценена для назначения. Например, предположим, что я выполняю допустимую операцию с правой стороны, но недействительную с левой стороны. Правый аппенд работал еще до того, как python понял, что возникла проблема слева, и выдал исключение
>>> lst1 = []
>>> lst2 =[1]
>>> lst1[1] = lst2.append(2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
>>> lst1
[]
>>> lst2
[1, 2]
Аналогичным образом set.remove
и list.append
соответственно изменяют свои набор и список и вернуть нет. Они работают точно так же, независимо от того, что случится с None позже.
Оба ваших примера набора удаляют «все» из набора. Разница заключается в том, что в первом случае вы перепривязываете stop_words
из набора к None
. Если нет других ссылок на набор, он удаляется. То же самое со списком.
stop_words = stop_words.remove("whatever")
stop_words.remove("whatever")
Это можно продемонстрировать, сохранив отдельную ссылку на объект для проверки
>>> test_set = {"whatever", "whatever 2"}
>>> stop_words = test_set
>>> stop_words = stop_words.remove("whatever")
>>> repr(stop_words)
'None'
>>> test_set
{'whatever 2'}
>>> stop_words = test_set
>>> stop_words.remove("whatever 2")
>>> stop_words
set()
>>> test_set
set()
То же самое происходит со списками
>>> test_list = []
>>> lst = test_list
>>> lst = lst.append(2)
>>> repr(lst)
'None'
>>> test_list
[2]
>>> lst = test_list
>>> lst.append(3)
>>> lst
[2, 3]
>>> test_list
[2, 3]