None и инициализировать внутри функции:
  
def my_function(my_list=None):
  if my_list is None:
    my_list = []
  my_list.append("something")
  return my_list
  Проблема изменяемых аргументов по умолчанию в Python возникает, когда функция использует изменяемый объект (например, список, словарь) в качестве аргумента по умолчанию. Поскольку аргументы по умолчанию создаются только один раз, при определении функции, а не при каждом вызове, последующие вызовы функции, которые изменяют этот объект, будут влиять на последующие вызовы, использующие аргумент по умолчанию.
Чтобы избежать этой проблемы, используют следующую стратегию: устанавливают аргумент по умолчанию в None и внутри функции проверяют, является ли он None. Если да, то создают новый объект по умолчанию.  Это гарантирует, что каждый вызов функции с опущенным аргументом получит новый, независимый объект.
Пример (проблема):
def append_to_list(element, my_list=[]):
  my_list.append(element)
  return my_list
print(append_to_list(1))  # Output: [1]
print(append_to_list(2))  # Output: [1, 2] - Неожиданно!
print(append_to_list(3))  # Output: [1, 2, 3] - Неожиданно!
В этом примере, список my_list инициализируется только один раз, и каждый последующий вызов append_to_list добавляет элементы к одному и тому же списку.
Решение:
def append_to_list_fixed(element, my_list=None):
  if my_list is None:
    my_list = []
  my_list.append(element)
  return my_list
print(append_to_list_fixed(1))  # Output: [1]
print(append_to_list_fixed(2))  # Output: [2] - Ожидаемо!
print(append_to_list_fixed(3))  # Output: [3] - Ожидаемо!
В исправленном примере, мы устанавливаем my_list в None по умолчанию. Внутри функции мы проверяем, равен ли my_list None. Если это так, мы создаем новый пустой список. Теперь каждый вызов append_to_list_fixed с опущенным аргументом получит новый список, и проблема общих объектов будет решена.
Этот подход можно применять к любому изменяемому типу данных, например, к словарям ({}) или множествам (set()).