Python

арументы (изменяемых объектов) функций в 1с и Python

Функ (Структура)
////
КонецФункции
в 1с в качестве аргумента функции передается адрес переменной?
а в Python передается в качестве аргумента адрес объекта на которую ссылается переменная?
Т. е. в вызываемой функции в 1с полученная переменная - это та же самая переменная (имеет тот же адрес памяти), что и в вызывающей функции,
А в Python - это другая переменная (имеет другой адрес памяти), но ссылаются на один и тот же объект.
Чет не могу техническую документацию найти.
Поведение отличается
не скажу за 1С, но для python - все правильно

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

сама переменная - это ссылка на этот объект. так же в роли ссылки может выступать элемент контейнера: ячейка списка, элемент множества, ключ или значение словаря, и т. д.
a = 1
b = [a]
c = {a}
d = {a:a}
во всех случаях в контейнерах будет храниться ровно тот же объект, что и в a

сама ссылка в рамках языка объектом не является, и присваивание одной ссылке значения другой перенаправляет первую на новый объект никак не затрагивая предыдущий объект на который она ссылалась.

в предыдущем примере если изменить значение a = 2, то b[0] все так же будет ссылаться на объект 1, потому, что там ссылка не была переназначена

если в c++, можно сделать так
int x = 1;
int &z = x;
z = 2;
cout << x << endl; // 2
и z, как и x будут ссылаться на новый объект 2.

в python присваивание оператором не является, и никак не контролируется программой. поэтому с помощью присваивания невозможно повлиять на содержимое объекта.

исключением можно было бы назвать подобные конструкции
a[x] = y
x += y
a[x] += y
но это не совсем присваивания. они на самом деле транслируются в следующие вызовы
a.__setitem__(x, y)
x = x.__iadd__(y)
a,__setitem__(x, a.__getitem__(x).__iadd__(y))

если объект не поддерживает присваивание со сложением, то на месте __iadd__ будут __add__, иначе __iadd__ на самом деле способен изменять содержимое своего объекта, если это прописано в его коде.
например
a = [1,2]
b = a
b += [3,4]
print(a) # [1, 2, 3, 4]

но для большинства классов в python такой функционал не реализован - однажды созданный объект в последствии изменить невозможно.
DG
Dmitriy Gutorovich
7 029
Лучший ответ
Валерий Черников "но для большинства классов в python такой функционал не реализован - однажды созданный объект в последствии изменить невозможно"
а = [1,2]
a.append(3)
Поменяли ведь объект?

В 1с тоже самое происходит в момент присваивания не простых типов:
а = Новый Массив ();
б = а;
б [0] = 1;
переменная а также будет ссылаться на тот же массив измененный (а [0]=1)
если а = Новый Массив ();,то это будут разные массивы, но если сделать так:
///////////////////
а = Новый Массив [1]; //а [0]=1
б = а; //б [0]=1
Функ1(а); //а [0]=5 //б [0]=1 //в Питоне останется а [0] =1
/////////////////////////////
Функ1(х)
х = Новый Массив [5];
КонецФункции
////////////////////
Только начал изучать Питон. Там код всегда открытый? или его можно зашифровать в коммерческих целях?
вот советую хороший сайт vdgb.ru/katalog-1s
Валерий Черников ховно твой сайт и фирма которую рекламируешь тоже