Python [различие между повторной ссылкой и мутацией в функции]
Я боролся с тем, чтобы увидеть, как эти два блока кода не дают одинаковый вывод K (изменяет K так, что он содержит все строки s, изначально в K такие, что f (s) возвращает True, и никаких других элементов)
def f(s):
return 'a' in s
K = ['a','b','a','c']
def satisfiesF(L):
ansList = []
for char in L:
if f(char) == True:
ansList += [char,]
L = ansList
return len(L)
а также
def f(s):
return 'a' in s
K = ['a','b','a','c']
def satisfiesF(L):
ansList = []
for char in L:
if f(char) == True:
ansList += [char,]
CloneL = L[:]
for e in CloneL:
if e not in ansList:
L.remove(e)
return len(L)
Когда я печатаю print K, первый блок дает:
['a','b','a','c']
в то время как второй блок дает:
['a','a']
что я и хочу Однако я пытаюсь понять механизм, в котором он дает такие ответы. Для меня это говорит, что я могу изменить / изменить вход функции, но я не могу просто переназначить свой ввод на то, что я хочу.