Въпрос за аргументите по подразбиране

  1. def func(arg=[]):
        arg+=[1]
        print(arg)
    func()
    [1]
    
    func()
    [1,1]
    
    func()
    [1,1,1]
    

    До тук всичко е наред, когато променя "arg+=[1]" --> "arg=arg+[1]" то тогава :

    def func1(arg=[]):
        arg=arg+[1]
        print(arg)
    
    func()
    [1]
    
    func()
    [1]
    
    func()
    [1]
    

    Защо става така? "arg+=[1]" и "arg=arg+[1]" не е ли едно и също ?

    Публикувано преди
  2. Разбрах! При arg=arg+[1] arg реферира новия обект "arg+[1]",а при arg+=[1] се изменя обекта рефериран от agr. :)

    Публикувано преди
  3. Наскоро четох статия за тея работи в C#. В зависимост откъде идваш, може би ще ти е полезно да видиш, че += и прочее има сложна семантика навсякъде.

    Публикувано преди

Трябва да сте влезли в системата, за да може да отговаряте на теми.