• Передача списка в объект класса по ссылке, как сделать?

    @throughtheether
    human after all
    Код покажите, скорее всего вы что-то неправильно делаете.
    Вот пример.
    >>> def f1(l):
    	l=l+[0]
    	
    >>> def f2(l):
    	l+=[0]
    	
    >>> def f3(l):
    	l.append(0)
    
    >>> mylist=[1,2,3]
    >>> f1(mylist)
    >>> mylist
    [1, 2, 3]
    >>> f2(mylist)
    >>> mylist
    [1, 2, 3, 0]
    >>> f3(mylist)
    >>> mylist
    [1, 2, 3, 0, 0]

    В первой функции выражение l=l+[0] создает локальную переменную l, которая ссылается на некий новый список, состоящий из элементов списка, переданного в функцию, с добавленным элементом (0). То есть l слева и l справа - это разные переменные.

    Во второй функции происходит (неявно) вызов метода объекта-списка, переданного в функцию, поэтому список в результате ("снаружи") изменяется. В третьей функции происходит явный вызов метода объекта, переданного в функцию.

    Хотел бы отметить, специалистом по CS (в части теории языков программирования) не являюсь, мог напутать с терминологией.

    Есть на эту тему хорошая статья.

    UPD:
    Первый пример подробнее:
    >>> def f1(l):
    	print "Value at function start: {}, id: {}".format(l,id(l))
    	l=l+[0]
    	print "Value at function end: {}, id: {}".format(l,id(l))
    
    	
    >>> mylist=[1,2,3]
    >>> f1(mylist)
    Value at function start: [1, 2, 3], id: 44215272
    Value at function end: [1, 2, 3, 0], id: 5440176
    >>> mylist
    [1, 2, 3]

    Видно по разным id, что происходит обращение к разным переменным.
    Ответ написан
    2 комментария