• Python: Почему такой результат этого кода?

    @fireSparrow
    Потому что в первой строчке вы не создаёте три разных массива, а создаёте три ссылки на один и тот же пустой массив. Потом вы в этот (один и тот же!) массив последовательно добавляете 'a', 'b', 'c'.
    То есть, во второй, третьей и четвёртой строчках кода вы обращаетесь к одному и тому же массиву, просто каждый раз через другую ссылку на него.

    В пятой строчке вы затираете одну из этих ссылок, заменяя её на уже другой массив [d]. Но другие две ссылки остаются.

    Легко проверить, что эти две ссылки на один и тот же объект.
    Если вы допишете в конце программы:

    x[1].append('z')
    print(x)

    То получите:
    [['d'], ['a', 'b', 'c', 'z'], ['a', 'b', 'c', 'z']]

    Нужно просто чётко понимать разницу между самим объектом и ссылкой на этот объект.
    Может существовать много ссылок на один объект.
    Ответ написан
    Комментировать
  • Python: Почему результат этого кода [1], а не []?

    aRegius
    @aRegius
    Python Enthusiast
    Потому что вы используете атрибут класса. А атрибуты классов совместно используются всеми экземплярами. А вот атрибуты экземпляров уникальны для каждого экземпляра:
    >>> class M:
    	    data = []
    	    def __init__(self, value):
    		    self.value = value
    
    >>> x = M(1)
    >>> y = M(2)
    >>> x.value
    1
    >>> y.value
    2
    >>> x.data
    []
    >>> y.data
    []
    >>> x.data.append(10)
    >>> x.data
    [10]
    >>> y.data
    [10]
    >>> x.value += 10
    >>> x.value
    11
    >>> y.value
    2
    Ответ написан
    Комментировать