Кажется, что a = a-b
отличается от a -= b
, и я не знаю почему.Python «a = a-b» и «a- = b» действительно эквивалентны?
Код:
cache = {}
def part(word):
if word in cache:
return cache[word]
else:
uniq = set(word)
cache[word] = uniq
return uniq
w1 = "dummy"
w2 = "funny"
# works
test = part(w1)
print(test)
test = test-part(w2)
print(test)
print(cache)
# dont't works
test = part(w1)
print(test)
test -= part(w2) # why it touches "cache"?
print(test)
print(cache)
Результат:
set(['y', 'm', 'u', 'd'])
set(['m', 'd'])
{'dummy': set(['y', 'm', 'u', 'd']), 'funny': set(['y', 'n', 'u', 'f'])}
set(['y', 'm', 'u', 'd'])
set(['d', 'm'])
{'dummy': set(['d', 'm']), 'funny': set(['y', 'n', 'u', 'f'])}
Как вы можете видеть, третья и последняя строка отличается. Почему во втором случае переменная «кеш» отличается? test -= part(w2)
не похож на test = test-part(w2)
?
Редактировать 1 - Спасибо за ответы, но почему изменяется var cache
?
Извините, но я не понимаю, почему «кеш» изменяется: в моем коде нет «кеша = тест» или подобных строк. –
@FrancescoFrassinelli: вы возвращаете ссылки на объекты, хранящиеся в кеше. Если объект изменен с помощью такой ссылки, содержимое кеша изменяется. – NPE