Быстрый в изучении - мощный в программировании
>> Telegram ЧАТ для Python Программистов

Свободное общение и помощь советом и решением проблем с кодом! Заходите в наш TELEGRAM ЧАТ!

>> Python Форум Помощи!

Мы создали форум где отвечаем на все вопросы связанные с языком программирования Python. Ждем вас там!

>> Python Канал в Telegram

Обучающие статьи, видео и новости из мира Python. Подпишитесь на наш TELEGRAM КАНАЛ!

ссылки python

Ссылки на изменяемые объекты долго живут К изменяемым объектам в Python относятся списки, словари и объекты наследуемые от базового класса object. Будьте крайне внимательны при написании программ, помните что связь на изменяемый объект сохраняется всегда.

class M(object):
    def __init__(self, data):
        self.__data = data
    def data(self):
        return self.__data
init_data = ['php']
m = M(init_data)
print m.data() # ['php']
init_data.append('python')
# объекты init_data и M.__data ссылаются на один и тот же объект
print init_data # ['php', 'python']
print m.data() # ['php', 'python']
data = m.data()
print data # ['php', 'python']
data.append('ruby')
# теперь уже 3 объекта ссылаются на одну и ту же переменную
print data # ['php', 'python', 'ruby']
print init_data # ['php', 'python', 'ruby']
print m.data() # ['php', 'python', 'ruby']

На самом деле даже если вы отправляете объект в функцию, связь не теряется на выходе. Функция возвращает ссылку на переменную.

M = lambda data: data
init_data = ['php']
m = M(init_data)
m.append('python')
print m # ['php', 'python']
print init_data # ['php', 'python']
print m is init_data # True

Будьте внимательны при написании программ, иногда необходимо чтобы метод класса или функция вернули новый объект, а не ссылку. Создать новый объект например из списка можно - list(lst), из словаря dict(). В остальных случаях поможет модуль copy.Далее...