Как мне манипулировать списком с помощью функции в Python (глобальная область)? - PullRequest
1 голос
/ 02 марта 2020

У меня есть список с целыми числами и строками l = [1, 2, 'a', 'b'], и я хочу написать функцию, которая берет список и манипулирует им таким образом, что впоследствии он просто содержит целые числа. Вывод функции выглядит так, как я хочу, но он не меняет «оригинальный» список.

def filter_list(l):
  temp =[]
  for item in l:
      if type(item) == int:
          temp.append(item)
  l = temp
  return l
Function output: [1, 2]
Variable explorer: [1,2,'a','b']

В отличие от функции

def manipulate(l):
    l.append("a")
    return l
Function output: [1, 2, 'a', 'b', 'a']
Variable explorer: [1, 2, 'a', 'b', 'a']

меняет «оригинальный» список.

  1. В чем разница между тезисом 2, т.е. почему второй
    манипулирует моим «оригинальным» списком, а первый - нет?
  2. Как мне настроить функцию 1, чтобы получить желаемый результат?

Спасибо!

1 Ответ

0 голосов
/ 02 марта 2020

В python все объекты передаются в функции по ссылке, что означает, что вы можете изменить объект, переданный вашей функции. Вот почему при вызове метода append во втором примере список меняется.

Однако если вы присвоите другой аргумент переданному аргументу (l = temp), то вы измените саму ссылку и, следовательно, не сможете вносить изменения в исходный объект из внешней области видимости. Это не проблема в вашем случае, потому что вы возвращаете новую ссылку, как вы должны в этом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...