Алексей
a = b = c = 0 a = 1 print(b)
в b лежит ссылка на 0, в a загоняется ссылка на 1
і64
в b лежит ссылка на 0, в a загоняется ссылка на 1
Ну да, но всё равно, это называется присваивание по значению
і64
Anonymous
Алексей
пруфы
a = 12345678 print(id(a)) b = 12345678 print(id(b)) b = a print(id(a))
Алексей
И? Айдишники разные
айдишники - это вроде как числового представления указателя на объект
Алексей
разные айдишники - значит разные объекты
Алексей
правда с 0 правда такое не прокатит, потому что у 0 всегда один айдишник, потому то мелкие числа закешированы
Дмитрий
»> a,b,c=[[]]*3 »> a [] »> a.append(0) »> a [0] »> b [0] »> a = b = c = [] »> a [] »> a.append(0) »> a [0] »> b [0]
і64
айдишники - это вроде как числового представления указателя на объект
Я чёт не понимаю, а где тут присвоение по ссылке?
і64
Присвоение по ссылке int a = 1; int b = &a; a = 2; // b is 2 too
Savva
Есть питоновский и экселевский файлы. в .py есть массив строк, как и в экселе и мне нужно их сравнить, но происходит какой то кошмар 1 скриншот прохожу циклом по экселю и сравниваю значения и принчу их (получаю False) 2 скриншот Копирую тот же самый текст, вставляю в другой .py и сравниваю и в ответе True Как такое может быть и как с этим бороться
Savva
Алексей
Я чёт не понимаю, а где тут присвоение по ссылке?
Везде. Любое присвоение и передача в параметры - это передача именно ссылок на объекты, а не самих значений.
і64
А в питоне такое не сработает
і64
Присвоение по ссылке int a = 1; int b = &a; a = 2; // b is 2 too
Tishka17
в конце, например
Алексей
А в питоне такое не сработает
не сработает, потому что 1) в питоне нет операции &a 2) int в питоне - это совсем не тоже самое, что и int в C/C++
і64
не сработает, потому что 1) в питоне нет операции &a 2) int в питоне - это совсем не тоже самое, что и int в C/C++
Я тебе аналогию делаю что такое присвоение по ссылке, ты не понимаешь?
Дмитрий
грубо говоря
Дмитрий
см выше мой пример
Dmytro
Строки неизменяемые типы, то есть во втором случае в переменную b запишется адрес, куда ссылается и переменная a.
Дмитрий
с мутабельными типами данных
Savva
может там пробел где-то?
сейчас посмотрю, спасибо за наводку
Anonymous
ладно, ладно, я напишу две запятых и два нуля, всё
Алексей
Я тебе аналогию делаю что такое присвоение по ссылке, ты не понимаешь?
Речь изначально не шла про присвоение по ссылке/не по ссылке, а про копирование/не копирование. И копирования самих объектов нет.
Tishka17
сейчас посмотрю, спасибо за наводку
а ещё я не знаю как оно работает с нормализацией юникода
Dmytro
А ещё "массив строк". Это что такое?
Dmytro
Может быть список?
Ivan
как в джанго сделать напоминание на страничке? у меня есть параметры в модуле дата-тайм и текст, как сделать, что бы на страничке выскокавало окно с напоминанием, и пока на него не нажмеш оно висело, даже после перезагрузки?
Dmytro
['a', 'b', 'c']
Там каждый следующий элемент создаётся новый, в независимости от содержимого. А в случае переменных они могут ссылаться на один участок памяти.
і64
Речь изначально не шла про присвоение по ссылке/не по ссылке, а про копирование/не копирование. И копирования самих объектов нет.
Это да. Копируются указатели на эти обьекты. Но почему когда я гуглю, везде говорят, что в пайтоне присваивание по значению? Мне интересует терминология
і64
это где говорят?
https://stackoverflow.com/questions/9696495/python-when-is-a-variable-passed-by-reference-and-when-by-value Я человек простой. Гуглю python assignment by reference or value
Алексей
https://stackoverflow.com/questions/9696495/python-when-is-a-variable-passed-by-reference-and-when-by-value Я человек простой. Гуглю python assignment by reference or value
Everything in Python is passed and assigned by value, in the same way that everything is passed and assigned by value in Java. Every value in Python is a reference (pointer) to an object.
Алексей
Те же яйца, только в профиль.
Tishka17
lol
Tishka17
указатели передаются по значению, ага
і64
Everything in Python is passed and assigned by value, in the same way that everything is passed and assigned by value in Java. Every value in Python is a reference (pointer) to an object.
Успокойся, я понимаю как работает присваивание в пайтоне. Я не понимаю почему это называют присваиванием по ссылке
і64
Или по значению
і64
И почему эта терминология такая есть?
Алексей
потому что это не присваивание, а передача (pass)
Алексей
и передача фактически идёт по ссылке
Алексей
что-то типа void func(object& obj);
і64
и передача фактически идёт по ссылке
В чём разница передачи по значению и передачи по ссылке?
koder
Everything in Python is passed and assigned by value, in the same way that everything is passed and assigned by value in Java. Every value in Python is a reference (pointer) to an object.
это ооочень тупое утверждение. По определению это передача по ссылке, независимо от того есть ли я зыке явные ссулки или нет
Алексей
но вообще кстати да, такое обычно называют передачей по ссылке
koder
В чём разница передачи по значению и передачи по ссылке?
по ссылке - данные не копируются и ты можешь (если ссылка не константна) обновить объект который тебе передали
Anonymous
Алексей
Обнови в пайтоне обьект, который тебе передали a = 123512234 b = a
ты не можешь обновить число, оно иммутабельно
Дмитрий
Обнови в пайтоне обьект, который тебе передали a = 123512234 b = a
есть мутабельные обхекты и не мутабельные
Дмитрий
числа, строки и туплы не мутабельны
Алексей
любые операции с числом создадут новое число
Дмитрий
их "обвноление" = создание нового
Дмитрий
а не запись в ту же область памяти нового значения
koder
Обнови в пайтоне обьект, который тебе передали a = 123512234 b = a
ты обновил локальную переменную, а не оригинальный объккт
Алексей
но, с помощью функции id всё равно можно заметить именно передачу по ссылке, а не по значению
koder
есть мутабельные обхекты и не мутабельные
дело не в мутабельности. присваивание только меняет на что указывает локальная переменная, но не трогает исходный объект
Алексей
а? переведи
ну я даже кусок кода скинул
Алексей
где два одинаковых числа имели разные айдишники
Алексей
потому что фактически были разными объектами, лежащими по разным адресам
koder
я тебя все еще не понимаю. да, чила больше 1024 в питоне будут иметь разын id
koder
даже если числа разные
koder
смотря как они создавались
Алексей
и присвоение переменными туда сюда не поменяют айдишник
koder
но как функция id позволит тебе что-то по ссылке передать
Алексей
что доказывает передачу по ссылке
Алексей
даже иммутабельных объектов
koder
а, сори, я неправильно прочитал