Я ВСЕХ ОБМАНУЛ... Извиняшки! Вся ПРАВДА о переменных в Python

แชร์
ฝัง
  • เผยแพร่เมื่อ 26 ก.ย. 2024
  • Так уж вышло, что я всех обманул. Сорянчики. Будем разбираться, как так вышло.
    Мой курс «Хардкорная веб-разработка» - course.to.digital
    Книжный клуб Ботаним!, где мы читаем хорошие ИТ-книги: botanim.to.dig...
    Telegram: t0digital.t.me
    Упоминаемые ресурсы:
    Mark Summerfield, «Programming in Python 3»: www.amazon.com...
    Выступление «Nina Zakharenko - Memory Management in Python - The Basics - PyCon 2016»: • Nina Zakharenko - Memo...
    Realpython, «Pointers in Python: What's the Point?»: realpython.com...
    Al Sweigart, «BEYOND THE BASIC STUFF WITH PYTHON»: inventwithpyth...
    towardsdatascience, «Memory Management And Garbage Collection In Python»: towardsdatasci...
    /****************** about ******************/
    Меня зовут Алексей Голобурдин, я программирую с 2004 года и на этом канале делюсь своим опытом. Я основатель и руководитель компаний:
    - Диджитализируй digitalize.team, разрабатываем сложные IT системы для бизнеса;
    - Salesbeat salesbeat.pro, комплексный модуль доставки для интернет магазинов.
    Telegram канал - t.me/t0digital
    ВК - digital...
    RuTube - rutube.ru/chan...
    Дзен - dzen.ru/id/623...

ความคิดเห็น • 461

  • @klyasyuk8284
    @klyasyuk8284 2 ปีที่แล้ว +201

    Красавчик. Те кто шарит и так всё поняли, а для тех кто не шарит и считает себя шибко умными - вот и повылазили. Претензий нет)

  • @evgenyzakiev693
    @evgenyzakiev693 2 ปีที่แล้ว +18

    Недавно начал смотреть канал Алексея. Блин, отличная подача материала, грамотно, юмористично. А самое главное, на мой взгляд, позитивно! Леха - ты молодец 👍 Спасибо за твой канал🤝

    • @t0digital
      @t0digital  2 ปีที่แล้ว +1

      Спасибооо:)!

  • @programisli
    @programisli 2 ปีที่แล้ว +65

    Про токсичность тоже хорошо сказал. Люди вместо дискусии переходят на токсичность не просто так. Но даже если у человека все норм, у него могут быть дни, когда эмоции берут верх. Это софт скил, над которым нужно работать. Негативные эмоции ухудшают состояние, а положительные делают жизнь лучше.

  • @mrm1tn1ck
    @mrm1tn1ck 2 ปีที่แล้ว +29

    Про "переменные" знал, так как учил работу памяти, но всегда приятно послушать грамотного человека. Лайк и спасибо.

  • @user-xx6wh5nm4s
    @user-xx6wh5nm4s 2 ปีที่แล้ว +17

    Фига, что происходит))
    Канал на стадии активного обсуждения - желаю ракетного взлёта!
    А знания, компетенции и ценности - и так присутствуют) Приятно слушать автора!)

    • @НиязРустемов-р3ц
      @НиязРустемов-р3ц 2 ปีที่แล้ว

      Автор сумел поднять активность в комментах? Молодец. В наше время это не просто сделать.

    • @user-xx6wh5nm4s
      @user-xx6wh5nm4s 2 ปีที่แล้ว

      @@НиязРустемов-р3ц главное - что сделал)

    • @НиязРустемов-р3ц
      @НиязРустемов-р3ц 2 ปีที่แล้ว

      @@user-xx6wh5nm4s надо будет учиться у него этому.

  • @ИльяЧерепанов-в8к
    @ИльяЧерепанов-в8к 2 ปีที่แล้ว +5

    Круто! Спасибо за информацию, очень помогает понимать, как всё работает на глубоком уровне. Отдельно радует повышение уровня съёмки и монтажа ;)

  • @programisli
    @programisli 2 ปีที่แล้ว +35

    Я увидел твое видео с вызывающим заголовком когда записывал свой видос про каналы, которые смотрю. Я ничего смертельного не вижу с том, что ты говоришь, что это не переменные, потому что действительно они технически работают по другому. Хотя я все же считаю, что это переменные, просто это immutable data types и такие есть в C# или Java (строки) и там они тоже переменные. Я НЕ вижу криминала и считаю, что заявление о том, что в Python нет переменных имеет право на жизнь и видео классное, потому что основная идея не в том, как называть это - переменные, недопеременные, а в том, как это работает в Python, а это очень важно понимать.

    • @t0digital
      @t0digital  2 ปีที่แล้ว +4

      Спасибо, Михаил!

    • @slavamogus3187
      @slavamogus3187 2 ปีที่แล้ว +1

      По факту это всего лишь ссылки на ячейки памяти где хранятся литералы, это обсалютно другие вещи, это то же самое что сказать агл слова beach и bich это одно и тоже лишь потому что они звучат одинаково, это бренд

    • @programisli
      @programisli 2 ปีที่แล้ว +9

      @@slavamogus3187 С точки зрения хранения это верно. Но ведь ссылка тоже сохраняется где-то и вот тут можно увидеть разные версии определения - это ссылка, это ссылочная переменная... Леша придерживается мнения, что это просто ссылка. Верно или нет? Верно с точки зрения тех, кто любит просто говорить ссылка и неверно с точки зрения с тех, кто считает это ссылочной переменной.
      Это все халивар, который не так важен, потому что я считаю, что самое главное понимать, как это работает. Если человек понимает, что в Python даже простое изменение числовой переменной приводит к выделению новой памяти, то это чудеса безопасности, но проблемы производительности. Можно долго спорить, как это правильно назвать, важнее знать, как это работает.

    • @knarg4682
      @knarg4682 5 หลายเดือนก่อน

      @@programisli
      > это ссылка, это ссылочная переменная..
      Внури списка перечислены... чтобы два раза не вставать, несколько созданных объектов "поток". Имён у них вообще нет. А ссылки от коллекции "список" -- есть. Неважно от чего, хоть от литерала, хоть от чёрта лысого, факт в том, что это просто "адреса", а не контейнеры.

  • @mr.nobody8948
    @mr.nobody8948 2 ปีที่แล้ว +11

    Ребята, давайте жить дружно! Не будем ссориться из-за переменных. Лучше вместе сплотимся против общего врага - PHP))

    • @leosv0
      @leosv0 2 ปีที่แล้ว

      Да, хорошо бы питон заменил пыху!

    • @ДмитрийАверьянов-щ4г
      @ДмитрийАверьянов-щ4г 2 ปีที่แล้ว

      @@leosv0 Дак потихоньку заменяет, раньше все над пхпэшниками прикалывались, а сейчас над питонистами))

    • @leosv0
      @leosv0 2 ปีที่แล้ว

      @@ДмитрийАверьянов-щ4г есть такое🙂

  • @igorantipov1735
    @igorantipov1735 2 ปีที่แล้ว +25

    Целых 11:08 потратил на объяснение очевидных вещей, всё для народа!
    P.S. Музыка - огонь! 😂

  • @alexeynikolaevskiy5922
    @alexeynikolaevskiy5922 2 ปีที่แล้ว +2

    Чуствовал подвох, но досмотрел. )) Спасибо за цитаты. И вообще, за короткие, без "воды", но инфомативные ролики по теме. Вы реально экономите нам, учащимся, наше время!

  • @ТимурПавлов-ж4ы
    @ТимурПавлов-ж4ы 2 ปีที่แล้ว +1

    Крутейший видос! Это самое лучшее начало видоса, которое видел!

  • @4687778
    @4687778 2 ปีที่แล้ว +55

    Очень удивлен, что есть на канале люди, которые не поняли отличий из прошлого видео и стали лить грязь... Еще раз спасибо за контент, мне всегда интересно смотреть ролики и я всегда нахожу для себя что-то новенькое :)

    • @computercomputer3293
      @computercomputer3293 2 ปีที่แล้ว

      Очень удивлен, что люди умеющие читать доки, не умеют анализировать информацию

    • @itreactor3864
      @itreactor3864 2 ปีที่แล้ว

      очень удивлен, что до сих пор переменные не могут сами себя инициализировать

    • @dimr5001
      @dimr5001 2 ปีที่แล้ว +1

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

    • @computercomputer3293
      @computercomputer3293 2 ปีที่แล้ว +1

      @@kirillgimranov4943 анализ информации. Посмотрите, что это. Из чего строится, как происходит, из чего состоит понимание

    • @computercomputer3293
      @computercomputer3293 2 ปีที่แล้ว +3

      @@kirillgimranov4943 и еще. Вы невнимательно смотрели первое видео. Там четко оговаривалось о каком виде переменных идет речь, о переменных в виде отдельных "коробочек". Вот таких переменных в пайтон и нет, о чем и был разговор, поэтому все претензии смотрятся очень странно и нелепо, и наводит на мысль о большой невнимательности при просмотре

  • @Uni-Coder
    @Uni-Coder 2 ปีที่แล้ว +7

    В общем, есть две терминологии: "переменная (в том числе и указатели)" и "имя-объект-связывание". Обе хороши. Я об этом тоже планировал рассказать, хотя не скоро.

  • @ИванИванов-е3н6й
    @ИванИванов-е3н6й 2 ปีที่แล้ว +4

    Спасибо за видео. Вообще информатика нас учит, что объекты можно передавать либо по значению, либо по ссылке. Если по ссылке, объект не копируется а передается ссылка на его место в памяти, если по значению - объект копируется и передается. Ваш пример из си - это передача по значению. Си умеет и по ссылке передавать. Так что глобально есть языки, где можно и по ссылке и по значению (С, Java), а есть где только по ссылке (Python). Как по мне, каждый язык в праве называть свои конструкции как хочется его создателям, главное чтобы все было формализовано.

  • @udacha163
    @udacha163 2 ปีที่แล้ว +3

    госпади)) Алексей, да не стоит обращать внимание на хайп! контент толковый и объясняешь всегда доступно.

  • @alexeis628
    @alexeis628 2 ปีที่แล้ว +2

    Момент 5:56 - в Питоне мы присвоили Петру ссылку на Алекса (Вы же в прошлом видео про ссылки и рассказывали), и потом через Петра изменили возраст Алекса
    в Си: чтобы присвоить указатель на переменную, надо сделать это явно (через *). Поэтому структура Man скопировалась при присваивании petr = alex;
    Эти две структуры стали независимы друг от друга, а в Питоне остался лишь один объект
    Момент 6:38 - "новый термин" - просто нужно говорить о ссылочных переменных

    • @Winexoid
      @Winexoid 2 ปีที่แล้ว +1

      у меня вопрос - а законно ли в C делать struct = struct? давно не кодил и появились сомнения - будет ли авто-вызов python-like .deep_copy() в C99+? что там в стандартах, что в gcc?
      хотелось бы подтвердить - просто копировал всегда memcpy(), т.к. знал что присвоение только для простых типов, а для структур нужна копи-паста (да, совсем old-style)

    • @ГригорийСтепанов-ы3ц
      @ГригорийСтепанов-ы3ц 8 หลายเดือนก่อน

      Такой же вопрос задал автору. Он вводит людей в заблуждение .

  • @HSGRSHKI
    @HSGRSHKI 2 ปีที่แล้ว +2

    Представляю глаза людей, пишущих что все изменяемые значения = переменные, когда они придут в Си/Си++ с поинтерами, рефами и переменными

  • @S3424868
    @S3424868 2 ปีที่แล้ว +4

    Я не программист, я любитель, балуюсь для себя. Но я понял всё, что говорилось в прошлом видео и по большей части уже знал, как это работает, а видео просто рассказало детально. Если уж я понял, что ж там за люди, что кипишь подняли

  • @ВикторОсипов-ю3ю
    @ВикторОсипов-ю3ю 2 ปีที่แล้ว +2

    Клёвый ответ! Питон под покровом простоты скрывает очень развитые вещи, свойственные традиционно более «сложным» языкам типа csharp и java, и, к сожалению, понимание этого приходит не сразу. Лишний раз убеждаюсь, что нужно изучать тему лучше и с разных сторон, чтоб понимать картину в целом. Удачи и процветания, жду ещё видосов!

  • @hilaaba
    @hilaaba 2 ปีที่แล้ว +3

    Переменная Шрёдингера!

  • @emmanuelgoldstein9079
    @emmanuelgoldstein9079 2 ปีที่แล้ว +2

    Я после Си на Питон через Лутца пришел. Как раз у Лутца узнал, что это всё указатели и жить сразу стало легче )

  • @Laertid
    @Laertid 2 ปีที่แล้ว +2

    Когда в видео про программирование добавляется минутка про самоанализ - это круто ^_^
    Давай серию роликов "Самоанализ как самотестирование" с методами из программирования применительно к психологии :) (вдруг это возможно связать? О_О Я не знаю, но было бы забавно...)
    Как вариант - хотя бы 1 штуку на первое апреля)

  • @iliag7068
    @iliag7068 2 ปีที่แล้ว +2

    Действительно, суть предыдущего видео ведь в том, чтобы донести до коллег то, как работает этот механизм под капотом, а не в объявлении войны понятию "переменная" в Python. Думаю, и сам Алексей продолжит использовать это определение)
    Но есть такие люди, которым нужно потешить своё "я")

    • @chu_ri5470
      @chu_ri5470 2 ปีที่แล้ว

      @@IvanIvanov-wn7ep скорее речь идёт о синдроме утёнка. После того как узнаёшь пять шесть способов организации памяти, подобное выветривается.

  • @Антон-з7т7ь
    @Антон-з7т7ь 2 ปีที่แล้ว +4

    Спасибо за труды, у Вас отличный канал, было бы здорово еслиб вы снова запустили свой курс, я не успел на него попасть к сожалению.

  • @leonidzimin2419
    @leonidzimin2419 2 ปีที่แล้ว +1

    + Марк Лутц, Изучаем python, гл. 6, п. Переменные, объекты и ссылки(стр.195), всё подробно описано, в принципе, тоже самое что и было сказано в прошлом видео. Да думаю, в большинстве книг по python, этот момент поднимается. Удивительно, что на ровном месте возникают такие конфликты.

  • @IllIll..
    @IllIll.. 2 ปีที่แล้ว +6

    Да, Дмитрий, это действительно информация, которая может быть полезной. Если, что-то проще скрипта простенького пишешь,
    А эмоции - дело такое, да. Надо тренировать внимательность к тому, что у тебя внутри.

  • @ВячеславБеляев-к9п
    @ВячеславБеляев-к9п 2 ปีที่แล้ว +4

    то, что тебя начали хейтить это не удивительно, ведь уровень знаний большинства python-истов крайне низок

    • @SantaCluster
      @SantaCluster 2 ปีที่แล้ว +1

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

  • @donfedor007
    @donfedor007 2 ปีที่แล้ว +3

    Видео огонь! И познавательно и с юмором! Автор молодец 💪👍спасибо Вам за Вашу работу👍

    • @t0digital
      @t0digital  2 ปีที่แล้ว +1

      Спасибо:)!

    • @donfedor007
      @donfedor007 2 ปีที่แล้ว +1

      @@t0digital пожалуйста 👍

  • @ВасилийСеребрянников-з5в
    @ВасилийСеребрянников-з5в 2 ปีที่แล้ว +2

    Алексей, спасибо вам за ваши видео, смотрю их довольно часто, много нового для себя узнаю! Про токсичность тоже интересно, будем надеяться что таких людей будет намного меньше в будущем))

  • @Vorono4ka
    @Vorono4ka 2 ปีที่แล้ว +1

    блин, совет мне кажется очень полезный, спасибо большое, прислушаюсь!

  • @IshuckShow
    @IshuckShow 2 ปีที่แล้ว +2

    Крутой видос, хорошо объяснил, всё по полочкам, за книгу отдельное спасибо, не читал
    Ps: жду стрим на 100к, прошлый стрим был очень ламповый

  • @i17talk8
    @i17talk8 2 ปีที่แล้ว +1

    смотрел предыдущее видео и думал, когда же будет следующее? :) В общем, просто вопрос терминологии. Кто знает, как работает, тому не важно, как это называется, переменная, референс, ссылка, указатель, ключ хэш-массива... Всё равно при кодинге вероятно будут применять привычные другим языкам шаблоны. Для этого, собственно, синтаксис переменных и оставили. Удобно же. Ну и + patch в мозгу для особенностей трансляции языка.

  • @PaulCherepnin
    @PaulCherepnin 2 ปีที่แล้ว +1

    Молодец! Уделал всех мамкиных теоретиков) другие, думали, поняли посыл и суть прошлого ролика

  • @cyberblogru
    @cyberblogru 2 ปีที่แล้ว +1

    Я это проходил еще в самом начале, когда изучал пайтон. Но все же все равно всегда говорю "переменные", так как это by design по спецификации языка. Если я скажу "Я создал переменную" меня поймет больше людей, чем если я скажу "Я создал ссылку". А язык (разговорный всмысле) я использую, чтобы меня мог понять другой человек в первую очередь. И я ОЧЕНЬ надеюсь, что благодаря тебе в мире не родятся токсики, которые будут душнить каждый раз, когда услышат слово "переменная"))

    • @leosv0
      @leosv0 2 ปีที่แล้ว +1

      Да, я тоже это в самом начале узнал. У Хирьянова в первой лекции по алгоритмам на питоне.

  • @SoulPervert
    @SoulPervert 2 ปีที่แล้ว

    классическая история на тему "почему в пайтон невозможен оператор x++"

  • @savir
    @savir 2 ปีที่แล้ว +1

    Лучшее объяснение и в прошлом видео и в этом. Респект!

  • @АнтонинаСмет
    @АнтонинаСмет 2 ปีที่แล้ว

    Спасибо, приятно слушать и смотреть, лайк, как всегда!

  • @BeginBye
    @BeginBye 2 ปีที่แล้ว

    Тут разница тонкая, и она касается именно реализации. Именно поэтому, чтобы подчеркнуть разницу механизмов, и названия их различны.
    Сейчас вот пытаюсь сформулировать эту разницу, и пришел к таким вот определениям, поправьте меня, если неправ.
    Классическая переменная - это верхнеуровневое наименование определенной области памяти, выделенной для хранения объекта.
    Ссылка (как в Пайтон) - это верхнеуровневое наименование самого объекта, находящегося в памяти по определенному адресу.
    Переменная - это имя "ящика", выделенного под определенный объект. При определении переменной, выделяется область памяти, необходимая для хранения объекта указанного типа (размер и конфигурация ящика). Когда мы обращаемся по имени переменной к объекту, мы по сути обращаемся к области памяти, которая его хранит.
    В Пайтоне несколько иначе. Тут имя переменной - это имя того, что находится внутри "ящика" - имя которое мы дали объекту. Когда мы обращаемся по имени переменной к объекту в Пайтон, мы обращаемся к самому объекту. При создании объекта, Пайтон определяет его тип (Duck Typing), выделяет в соответствии с ним область памяти, и привязывает к объекту, не к области памяти, указатель - имя, нашу "переменную". Сам же запоминает, куда он этот объект положил. Область памяти будет зарезервирована за этим объектом до тех пор, пока существует хотя бы один указатель на этот объект. Указателей не осталось - GC снял резерв с этой области, и ее снова можно использовать для записи.
    Используя механизм переменных, наш запрос, после ее определеня (создания "ящика") таков: дай мне содержимое вот того "ящика".
    Используя механизм ссылок, наш запрос таков: дай мне вот этот объект. В каком ящике он лежит - сам знаешь.

  • @mikisor4372
    @mikisor4372 2 ปีที่แล้ว

    Спасибо за труд! Ждем новых видео !

  • @KrassRome
    @KrassRome 2 ปีที่แล้ว +1

    Начало улыбнуло

  • @dmitryn.4506
    @dmitryn.4506 2 ปีที่แล้ว

    Просто автор слишком умный и, видать, с C++ знаком, и тогда, действительно, по сравнению с "сями", конечно же, то, что у нас в Питоне есть, никак нельзя назвать просто переменными (это объекты или ссылки). Вот и бомбануло пуканы у тех, кто кроме Питона программированием не интересуется 😅
    Чтобы не нарваться на праведный гнев, стоило предысторию своих рассуждений рассказать сначала... 😁👍
    Но, как ни крути, для нормального общения и описания происходящего, мы все, всё равно, будем называть их "переменными", иначе, в конце концов, задротством терминологическим каким-то начинает попахивать 😅, однако же подразумевая, что, по сути, они не переменные... 👍
    А вообще, очень круто всё рассказал!! 🤘😎

  • @novichok3417
    @novichok3417 ปีที่แล้ว

    Вы не можете отказаться от использования картонных коробок в программировании. Так и многие не могут отказаться от термина - переменная

    • @t0digital
      @t0digital  ปีที่แล้ว +1

      Вы бы предпочли деревянные коробки? Целлофановые пакеты? Металлические шкафчики?

  • @vanadoo5836
    @vanadoo5836 2 ปีที่แล้ว

    А константы - тоже ссылки же? Как и обычные питоновские переменные? И их также можно переприсваивать в каждой новой строчке?

  • @ДмитрийБеляев-ъ1з
    @ДмитрийБеляев-ъ1з ปีที่แล้ว

    Вижу, что видео уже год, но я только сейчас на него наткнулся и всего пару дней назад на предыдущее, но тем не менее хочется порассуждать.
    Во-первых, хочу заметить, что людям свойствено давать знакомые имена тем сущностям, которые выглядят знакомо, то есть в их логике если что-то выглядит как переменная, то это переменная. Но у всех языков есть своя специфика, а значит такой подход может быть ошибочным. Как пример здесь можно привести Rust, где по сути тоже нет переменных, а есть владельцы.
    Во вторых, хочется порассуждать насчет ссылок. Тут хочется для начала заметить, что ссылки, представляющие собой, конкретно в Python, адрес - так же храняться в памяти. И если сравнивать например с C (где кстати нет ссылок, но есть указатели), то там переменная с типом int* все равно будет переменной, хоть и в ней хранится только адрес, а сами данные где-либо еще. Хорошей аналогией тут будут ссылки из C++, которые по сути являются абстракцией компилятора и реально являются просто еще одним именем для данных по определенному адресу в памяти, но сам этот адрес разруливается в compiletime и в ссылке не хранится.
    Еще тут хочу привести в пример JS, где по сути так же все объекты, а в переменных хранятся лишь ссылки (по крайней мере в реализации V8 так, стандарт же позволяет хранить некоторые типы как значения, хотя с теми же строками это не возможно технически), но при этом в JS эта сущность называется переменной.
    Как-то так, и за истинной думаю стоит идти в исходники компиляторов/интерпретаторов конкретного языка.

  • @DrEl1985
    @DrEl1985 2 ปีที่แล้ว +2

    Ну и зачем я это смотрел? Думал будет объяснение что переменные таки существуют, ан нет =) Справедливость и здравый смысл восторжествовали =)

  • @kizik85
    @kizik85 2 ปีที่แล้ว

    Подписался на канал! Красавчик! Хорошо объясняешь!!! Продолжай в том же духе!!!

  • @egorasirotiv270
    @egorasirotiv270 2 ปีที่แล้ว

    Офигенный контент!)
    Я думаю, что у джунов сильно подгорело)

  • @AlexDanov
    @AlexDanov 2 ปีที่แล้ว +2

    С точки зрения, например C#, в примере сравниваются в Python Reference Type (копируется ссылка), а в Си Values Type (копируется значение). Пример не зачтён )
    Оба эти примера с аналогичным поведением можно реализовать в C#. Просто у ПЕРЕМЕННЫХ типы разные! )

    • @repgrid2986
      @repgrid2986 2 ปีที่แล้ว

      В C# будет ли переменная reference type или value type зависит от её типа. В C reference type можно задать для любого типа явно через * (например, int * a). А в Python, как понимаю, именно value type и нет, все переменные - reference type

    • @AlexDanov
      @AlexDanov 2 ปีที่แล้ว +2

      @@repgrid2986 да, в Python нет Value Type совсем. И договорились до того, что нет переменных, а только имена. Впрочем, как Алексей писал в комментариях, во многих языках вводят свою терминологию, отличную от принятой. Переживём )
      В конце концов, разработка новых языков движется в сторону новых смыслов. Можно понять и просить. Python достаточно своеобразный язык.

    • @repgrid2986
      @repgrid2986 2 ปีที่แล้ว

      @@AlexDanov но кстати, разве семаниически что-то меняется от того, используем ли как в питоне ссылку на объект хранящий число 3 (или любой другой объект неизменяемого типа) или value type переменную, содержащую это значение внутри себя, как в других языках? Мне кажется пример, где будет принципиально разное поведение, сложно придумать (если вообще возможно), нет?

    • @AlexDanov
      @AlexDanov 2 ปีที่แล้ว

      @@repgrid2986 приведу исходник на C# 9, для демонстрации различия Reference/Value Types. Но alex и peter это переменные в терминологии C#
      using static System.Console;
      {
      var alex = new ManValueType(33);
      WriteLine(alex.Age);
      var peter = alex;
      alex.Age = 10;
      WriteLine($"Alex Age={alex.Age}, Peter Age={peter.Age}");
      }
      {
      var alex = new ManClassType(33);
      WriteLine(alex.Age);
      var peter = alex;
      alex.Age = 10;
      WriteLine($"Alex Age={alex.Age}, Peter Age={peter.Age}");
      }
      struct ManValueType
      {
      public ManValueType(int age) { this.Age = age; }
      public int Age;
      }
      class ManClassType
      {
      public ManClassType(int age) { this.Age = age; }
      public int Age;
      }
      Этот код выдаст на консоль:
      33
      Alex Age=10, Peter Age=33
      33
      Alex Age=10, Peter Age=10

    • @Сергей-с7е2к
      @Сергей-с7е2к 2 ปีที่แล้ว

      @@AlexDanov кажется, вы не поняли вопрос - я не про различие reference и value types для изменяемых типов, а про то, какие могут быть семантические различия для простых неизменяемых типов, таких как int, если их значения будут храниться в самой переменной, как в б-ве языков, или будет храниться ссылка на объект этого неизменяемого типа, как в питоне -- мне кажется пример, подрбный приведенному вами или Алексеем для этого случая не придумать, т.е семантического различия здесь нет, или ошибаюсь?

  • @markervictor
    @markervictor 2 ปีที่แล้ว +1

    Как кажется, вся соль в совершенно отличающейся механике оператора присваивания. В плюсах, c# и т.п. он кладёт какое-то значение в область памяти, на которую ссылается имя (ссылки просто обертка над присваиванием значения по указателю). В питоне же он буквально присваивает имя конкретному объекту (говорит интерпретатору, что теперь этот объект доступен по этому имени и добавляет +1 к счетчику ссылок объекта).

    • @markervictor
      @markervictor 2 ปีที่แล้ว

      Действительно сложно назвать связь имя -> объект переменной, скорее в питоне всюдо то, что где-то называют label

    • @markervictor
      @markervictor 2 ปีที่แล้ว

      Что-то еще задумался, на сколько вообще корректно в питоне называть = оператором присваивания. По факту это statement как import as ... . С точки зрения соответствия синтаксиса и реализации интерпретатора более корректно было бы использовать именно «10 as a» вместо «a = 10». Но это было бы значительное отличие от C-подобных языков. Отсюда и всё недопонимание...

  • @AlexandrSpirit
    @AlexandrSpirit 2 ปีที่แล้ว +1

    Новички в пайтоне, пока не сталкиваются с вопросом оптимизации кода в плане скорости и потребления ресурсов, могут не заморачиваться с терминалогией и не разбираться как оно там под капотом работает.
    Но как только встанет вопрос... тут сразу придется копать. Копать серьёзно.

  • @romantsaregorodtsev9993
    @romantsaregorodtsev9993 2 ปีที่แล้ว +2

    Фух, хорошо, что это видео вышло. А то я уже ехал разобраться с Алексеем. Молодец, что признал свою ошибку

  • @ТиминАлексей-с2т
    @ТиминАлексей-с2т 2 ปีที่แล้ว +1

    Я бы назвал это "переменные с типом данных ссылка на объект"

  • @sergeyalekseenko6456
    @sergeyalekseenko6456 2 ปีที่แล้ว

    Извинения размером с хвостик колибри.
    И да, я попался на кликбейт. Начал смотреть с мыслью: Как так обманул?! Всеж по факту в прошлом видео как есть рассказал!? Надо глянуть...
    Но 0:37 это ваще смертельное оружие и запрещённый прием. Спасибо, улучшил настроение перед сном. :DDD

  • @sashasashovic91
    @sashasashovic91 2 ปีที่แล้ว

    Очень хорошое объяснение , жду ещё информации.

  • @JohnSmith-pb7cn
    @JohnSmith-pb7cn 2 ปีที่แล้ว

    Да, спасибо, интересные эффекты получаются:
    1. Если создать переменную в функции, вывести её результатом в другую. При изменении 2-ой переменной мы меняем результат работы функции фактически.
    2. Каждое присваивание константе - выделение нового блока памяти.
    Всё укладывается в ссылочный тип CPP.

  • @andrewbondaryuk
    @andrewbondaryuk 2 ปีที่แล้ว +1

    Вообще даже в Си на уровне исходника есть именованная изменяемая область памяти, чтобы кожанным мешкам было удобно.
    При компиляции остаётся только адрес области.

    • @andrewbondaryuk
      @andrewbondaryuk 2 ปีที่แล้ว

      @@IvanIvanov-wn7ep
      Потому что указатель это изменяемая область памяти ;)

    • @andrewbondaryuk
      @andrewbondaryuk 2 ปีที่แล้ว

      @@IvanIvanov-wn7ep
      Это как?

    • @andrewbondaryuk
      @andrewbondaryuk 2 ปีที่แล้ว

      @@IvanIvanov-wn7ep
      Вы сейчас про указатель в каком языке? 😀

    • @andrewbondaryuk
      @andrewbondaryuk 2 ปีที่แล้ว

      @@IvanIvanov-wn7ep
      В Сях? Атрибут указателя? Чо?

  • @АлимарРамазанов-в3х
    @АлимарРамазанов-в3х 2 ปีที่แล้ว

    Продолжай делать хороший качественный контент✊

  • @alexandreabramtsev9160
    @alexandreabramtsev9160 2 ปีที่แล้ว +1

    Мне кажется ты зря извиняешься (но я вижу что все таки стебешься над кем то )), я бы пошел дальше. В python нет не только переменных, но и функций! Это даже в ключевых словах отражено - вместо func(tion) мы пишем def(inition) - т.е. есть только отределения функций. D) Ну и функция в python это тоже объект...

  • @НиколайПетров-в7ж
    @НиколайПетров-в7ж 2 ปีที่แล้ว +2

    Назвали бы переменные в пайтоне правильно и не было проблем. Например label-variable, то есть вешаем на объект табличку, вот это сегодня будет называться так. А вообще все проблемы с переменными из-за отсутствия жесткой типоризации.

    • @harry-smith404
      @harry-smith404 2 ปีที่แล้ว

      А зачем, в утилитарном смысле это переменная для большинства.

  • @septembertakoito314
    @septembertakoito314 2 ปีที่แล้ว

    Вступление топ - ждем номинацию на оскар.

  • @unix3d
    @unix3d 2 ปีที่แล้ว +4

    Алексей браво, не обращайте внимание на хайп вокруг того что "я могу поменять значение значит это перемменая", многие те кто недавно в теме их так научили они не понимают как хранятся данные в памяти чем отличается Reference Type от Value Type, про стек и кучу я уж умолчу потому что люди которые это знают и понимают ни когда не напишут что в интерпретировоном языке Python есть переменые ИМХО. Лайк однозначно за контент!

    • @septembertakoito314
      @septembertakoito314 2 ปีที่แล้ว +1

      Это не хайп - это идиотизм)

  • @MrWhisper001
    @MrWhisper001 2 ปีที่แล้ว

    0:38 - идеальный винипух )

  • @grannycola158
    @grannycola158 2 ปีที่แล้ว

    Не помню, у Тимофея Харьянова слышал, что у языков программирования нет как таковых переменных (совсем под капотом), а есть только константы и функции.

  • @stephan_inside
    @stephan_inside 2 ปีที่แล้ว

    ЖЕСТКО про переменные в python

  • @sergefa5862
    @sergefa5862 2 ปีที่แล้ว

    Variable произносится с ударением на первый слог.

  • @yuralamov9835
    @yuralamov9835 ปีที่แล้ว

    Затянула тема. По 2 раза просмотрел эти 2 видео, затем полез в доку python, python/c api и с. Если мы просто print(id("jhgfjhf")) это будет область кучи, где расположена не объявленная и не инициализированная переменная для будущего использования? По моему, любая переменная это объект со своими свойствами, в том числе и стартовым адресом хранения самих данных, к которым мы можем обратиться посредством указателя с типом данных куда он лезет. Или я не прав?

  • @romanrrv
    @romanrrv 2 ปีที่แล้ว

    Было весело :)

  • @ВячеславДмитриев-ц4п
    @ВячеславДмитриев-ц4п 2 ปีที่แล้ว

    Я ваще подумал, что изобрели язык тока на константах! )

  • @nigvi6229
    @nigvi6229 2 ปีที่แล้ว

    Во многих языках не редкость если передается по ссылке, но это не влияет на то что их называют переменными. Так же если не ошибаюсь примитивы в js все сохраняются по значению за исключением строк, но это не мешает им вести себя как обычные переменные. То есть у тебя есть тьма текста и ты копируешь содержимое и в памяти нет копии пока ты не изменишь ее в самой переменной, вот именно это реализация и на мой взгляд это не делает переменные со строкой не переменными в js. Я считаю что это тоже переменные но ссылочного типа. Если все начать делить на подтипы и назвать по разному то у нас DevOps профессий штук 50 будет как и паттернов или если в js нет типов то и паттернов тоже. Окей у нас будет у каждого языка свой SOLID, DRY и тд. ну а почему нет языки же разные как и переменные.

  • @ГригорийСтепанов-ы3ц
    @ГригорийСтепанов-ы3ц 8 หลายเดือนก่อน

    В первом случае присваиваются адреса, во втором копируются значения из одной структуры в другую . как это можно сравнивать ?

    • @t0digital
      @t0digital  8 หลายเดือนก่อน

      Можно сравнивать любым из доступных методов сравнения.

  • @ivanshipilov4265
    @ivanshipilov4265 2 ปีที่แล้ว

    The Zen of Python, by Tim Peters
    ...
    19.Namespaces are one honking great idea -- let's do more of those!
    "Namespaces" - пространство имен, т.е. мы имеем Namespaces и Names. Ни про какие variables речи не было.

  • @ДанькаЛобанов-у6ю
    @ДанькаЛобанов-у6ю 2 ปีที่แล้ว +1

    ну да, работают по разному, но переменными они от этого быть не перестали. Это разница реализации языка. А ещё в питоне цикл фор по дефолту итерируется по объектам а не по индексам, а ещё у нас нет массивов, но есть списки. Если так рассуждать то то что питон не си делает питон не языком программирования. В го нет классов, но есть структуры, там нет и ооп в привычном нам виде, но тем не менее на Го реализовывают объекты со свойствами и методами, и делают некое подобие ооп. Тоже сильно иная архитектура языка. Это всё я к тому что языки реализованны по разному, и на то есть причины. В этой разнице их слабости и сила. То что у нас переменные реализованны иначе не перестаёт их делать переменными ссылочного типа, а то что интерпретатор создаёт новую область памяти а старую отдаёт гарбич коллектору это просто особенность реализации. Мы можем перестать назывть переменные в питоне переменными, а начать их называть лейблами, но новичкам объяснять их всё-равно будут через понятие переменных потому что так проще и привычней по аналогии с другими яп. И про го будут выходить статьи про ооп(которого нет) чтоб объяснить как реализовать привычный нам паттерн объектов в языке в котором из коробки нет классов.

  • @DimiEG
    @DimiEG 2 ปีที่แล้ว

    В свете текущих событий как это отразилось на вашем бизнесе и планируете ли вы создать дополнительную площадку для своих видео? (Некоторые используют ещё Zen Yandex)

    • @t0digital
      @t0digital  2 ปีที่แล้ว

      Как отразится на нашем бизнесе пока до конца непонятно. Телеграм открою, да, сегодня будет видео о wireguard vpn

  • @kookaburru
    @kookaburru 2 ปีที่แล้ว

    Одно замечание собственно почему в питоне нет переменных как таковых это то что тип объекта хранится в самом объекте, а так называемая переменная всего лишь имя :)

  • @teftelpastalog7667
    @teftelpastalog7667 2 ปีที่แล้ว

    В общем-то тема трогает только тех, кто не понимает Python. Кто понимает, ничего нового не услышал))

  • @The8Shift
    @The8Shift 2 ปีที่แล้ว

    ого. не думал, что такое познавательное видео может кого-то задеть... чёёёё ваще)

  • @ratium_call_me
    @ratium_call_me 10 หลายเดือนก่อน

    0) в C нет ссылок, только указатели. ссылки есть в C++, не в C.
    1) C код, объявлен аналогичным Python'у, таковым категорически не является. в Python'е на стопке выделяется указатель alex и он строится в куче с полем age == 33, потом на стопке выделяется указатель petr и ему присваивается аддресс указателя alex. потом мы изменяем память через указатель petr по смещению age и так как [указатель petr] == [указатель alex] то мы изменили ту же память что и по смещению age у указателя alex. вывод логичен.
    в C коде: мы выделяем 2 структуры на стеке: alex и petr, в начале в поле age структуры alex пишем 33, потом делаем копирование(компилятор TCC(Tiny C Compilier) у меня делает через memmove) стековой памяти структуры alex в стековую память структуры petr, потом изменяем поле age у структуры petr. вывол логичен.
    C-код логически эквивалентный Python-коду:
    "
    typedef struct {
    int age;
    } Man;
    int _start()
    {
    Man* alex = (typeof(alex))malloc(sizeof(alex));
    Man* petr = (typeof(petr))malloc(sizeof(petr));
    alex->age = 33;
    petr = alex;
    petr->age = 10;
    printf("Alex's age is %d
    ", alex->age);
    printf("Petr's age is %d
    ", petr->age);
    return 0;
    }
    "
    также хочу предупредить что код выше написан для TCC(Tiny C Compilier), поэтому измените _start() на main() если твой компилятор не поддерживает прямую точку входа, не забудьте прописать include'ы для функций malloc и printf
    Я понимаю что Ты хотел объяснить динамическую особенность переменных в Python'е но переменные есть то что изменяемся и в Python'е есть много переменных, в том числе структуры, для доказательства посмотри этот код:
    "
    class Man:
    def __init__(self, age: int):
    self.age = age
    self.height = 128
    petr = Man(33)
    print("Petr's sit at address", id(petr))
    print("Petr's age is", petr.age, "at address", id(petr.age))
    print("Petr's age is", petr.height, "at address", id(petr.height))
    petr.height = 192
    print("Petr's sit at address", id(petr))
    print("Petr's age is", petr.age, "at address", id(petr.age))
    print("Petr's age is", petr.height, "at address", id(petr.height))
    "

    • @ratium_call_me
      @ratium_call_me 10 หลายเดือนก่อน

      переменные везде переменные, фантазии излишни.
      понимать что такое переменная и писать это одназначным термином это разные понятия. понимание Марка Я не знаю, но пример на Python'е выше доказывает что petr это порядочный переменный, который известно где сидит и меняется там без экстрадиции)))

  • @СергейТележкин-г7ш
    @СергейТележкин-г7ш 2 ปีที่แล้ว

    М-да уж... Ну конечно же, переменные, как языковая конструкция любого современного языка, есть. Другое дело - их реализация в Питоне. Выяснили, что они - не что иное как ссылки (или адреса) на создаваемые при их инициализации (с нюансами) экземпляры классов, т.е. все переменные в Питоне носят объектный характер. Не поспоришь. И булыжников даже не надо. Без претензий точно. Уже одно то, что к имени переменной с базовым, казалось бы, типом можно суффиксом воткнуть оператором точку и обращаться к ее св-вам и методам уже говорит о том, что это не что иное как экземпляр класса. И все-таки, с точки зрения синтаксиса, это переменная языка, в общем ее понятии. То что базовый, казалось бы, тип может стать родительским классом для пользовательского, тоже говорит о том, что тип у него классовый. Че спорить-то попусту. Другое дело - производительность таких переменных и свобода выбора, которой нас, к сожалению, в Питоне лишили. Но это уже совсем другая история...

  • @yan200go
    @yan200go 2 ปีที่แล้ว

    Диджитализируй! Можете, пожалуйста, снять код ревью? Можно даже устроить серию видео. Думаю, многим это сильно поможет(и мне в их числе). P.S. извините, что не по теме

  • @engsara1610
    @engsara1610 2 ปีที่แล้ว

    Многие разрабы используют слово для таких случаев "идентификатор" ;)

  • @yunushkin88
    @yunushkin88 ปีที่แล้ว

    Нет ну на собеседовании задавали такой вопрос - говорят тип что в питоне нет переменных как Вы можете это объяснить? Хотя начинал я собеседование по С++))

  • @CapTheFox
    @CapTheFox 2 ปีที่แล้ว +1

    Алексей, можно ли у вас узнать, что за модель микрофона вы используете, очень хороший звук в ваших роликах.

    • @t0digital
      @t0digital  2 ปีที่แล้ว

      Спасибо!
      В этом видео Rode NTG-3

  • @artemorlov9941
    @artemorlov9941 2 ปีที่แล้ว +3

    Я думаю, что в Python есть переменные, и все всегда передается по значению, а не по ссылке. Вот смотрите, переменная - область памяти, в которой лежит некоторое значение. В Python этим значением может быть только ссылка на другую область памяти. При присвоении в переменную другого значения, в область памяти, выделенную под переменную, будет положена другая ссылка. При передаче переменной в функцию, будет передаваться значение переменной (ССЫЛКА), но не сама переменная, т.е. внутри функции ссылка та же, но переменная другая. Поэтому переприсваивание внутри не приводит к переприсваиванию снаружи. Обращаю внимание, что есть язык программирования С#, в котором по-умолчанию все ведет себя так же как и в Python, ссылочные переменные передаются по значению. Однако при добавлении ключевого слова ref, ссылочные переменная начинает передаваться по ссылке, и переприсвоение внутри функции ведет к переприсвоению снаружи функции. Поэтому, Python - язык со ссылочными переменными, которые передаются только по значению. Хотя тема, конечно, спорная, и на собесе я вряд ли стал бы говорить, что в Python и JavaScript все передается по значению, хотя я так считаю)))

  • @НиктоНиктоев-щ7ю
    @НиктоНиктоев-щ7ю 2 ปีที่แล้ว

    А кто-нибудь может объяснить, зачем писать petr=alex? Какая в этом смысловая нагрузка? Вот у нас был объект алекс, а потом мы что сделали его копию с новым именем? Или создали еще одну ссылку на алекса? Зачем?

  • @ИгорьЛатуха
    @ИгорьЛатуха 2 ปีที่แล้ว +1

    Все есть объек 🙏 не все поймут, староверы не примут 😁

  • @masynchin
    @masynchin 2 ปีที่แล้ว +1

    Алексей, не спорю с темой обсуждения, но апелляция к авторитету? Выглядит несолидно

    • @arxxximed
      @arxxximed 2 ปีที่แล้ว

      Вроде она уместная эта аппеляция. На автора гнали "ТЫ не прав". "Твои слова не верны". Вот он и показал, что это не совсем и его слова.

  • @sergiyr9152
    @sergiyr9152 2 ปีที่แล้ว

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

    • @t0digital
      @t0digital  2 ปีที่แล้ว +1

      И даже в документации на python org переменные, ага!

    • @sergiyr9152
      @sergiyr9152 2 ปีที่แล้ว

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

  • @harry-smith404
    @harry-smith404 2 ปีที่แล้ว +1

    Еще надо было в костер подкинуть палку является ли указатель переменной)))

  • @shamrockspb
    @shamrockspb 2 ปีที่แล้ว

    переменные - шмеременные, а музыку фоновую шикарно подобрал

  • @ВасилийЛеонов-ч4ъ
    @ВасилийЛеонов-ч4ъ 2 ปีที่แล้ว

    Так всё таки возвращаясь к стеку и куче, почему хранилище ссылок это стек? Там нет никакаго "последний на вход - первый на выход"

  • @rockkley9159
    @rockkley9159 2 ปีที่แล้ว

    Спасибо!
    Хороший вывод про эмоции

  • @alexelizard1798
    @alexelizard1798 2 ปีที่แล้ว +1

    Смысл в том что в английском есть понятия name variable и reference. Но в русских источниках это всё указывают как переменная, значение, ссылка/указатель.
    Т.е. name = переменная, variable = значение, reference = указатель. От этого и идет путаница. В прошлом видео вы объяснили суть, но не указали на этот момент в терминологии, от этого и получился спор в комментариях.
    Думаю нужно было просто рассказать о этой путанице и что переменные в python хранят в себе указатели(ссылки) на значения. Ведь видео было именно об этом.

    • @Winexoid
      @Winexoid 2 ปีที่แล้ว +1

      значение - это value! а не variable, ещё точнее - rvalue.
      имхо, вся проблема в том, что надо изначально учить C и понимать, что в скриптовых/динамических языках программирования в основном используються поинтеры (ссылки, ref, weakref) на value, которые также динамически создаются, в том числе И во время исполнения...
      (молчу о том, что именно время исполнения и есть компиляция...)
      в C никогда не позволялось языковыми конструкциями динамическое создание переменных (хотя руками можно подобие сделать, но сейчас не об этом!).
      простым языком C/C++ о "переменных" Python, кто понимает (псевдо, не скомпилиться!):
      int *a_variable1 = &(0x01);
      int *a_variable2 = &(0x02);
      // ...
      int *some_ref = a_variable1;
      // ...
      some_ref = a_variable2;
      что и привёл автор в первом видео...

  • @dimr5001
    @dimr5001 2 ปีที่แล้ว

    В C/С++ переменная это по сути адрес памяти где хранится какие-то данные ( единички и нолики). Либо на стеке либо в куче. Компилятор все названия переменных заменяет на адреса памяти. В пайтоне данные хранятся только в куче а ссылки на эти данные на стеке. По сути в пайтоне всегда Object* p = new Object . Потому что там все объект. Я лично какой то концептуальной разницы не вижу. Просто реализация отличается.
    И сравнивать структуру и класс немного не корректно. В Пайтоне в примере делается силка на ссылку (petr) и уже по силке обращается объекту. Уже под капотом идет разыменование ссылок . А в С мы создаём две экземпляра структуры у которых два разных адреса в памяти. Понятно что они как бы не взаимосвязаны.

  • @romanryaboshtan9270
    @romanryaboshtan9270 10 หลายเดือนก่อน

    5:58 интересно, что в javascript это работает также как в python, тоже ссылки и иммутабельность

  • @turembekov
    @turembekov 2 ปีที่แล้ว

    Алексей! У меня НЕТ сомнений в твоём профессионализме. Ты всё правильно сказал, переменных в Python нет, есть ссылки на них. А всем тем кто говорит обратное, я предлагаю начать изучение Python с нуля и очень внимательно. Тимофей Хирьянов даст вам хорошие уроки. Алексей, ещё раз приклоняюсь перед твоим профессионализмом.

  • @nadirnazirov4707
    @nadirnazirov4707 2 ปีที่แล้ว

    назовём это - таксичной переменной !?

  • @beebikey4370
    @beebikey4370 2 ปีที่แล้ว

    Пусть хейтеры напишут свой интерпретатор на компилируемом языке и тогда посмотрим что такое переменные, а что такое ссылкой или указателями

  • @denismaleev3848
    @denismaleev3848 2 ปีที่แล้ว +6

    В смысле, просто подмена понятий произошла внутри комьюнити. Все привыкли называть variable. Автор топ все четенько описал !!!

  • @oleg_kishinskii
    @oleg_kishinskii 2 ปีที่แล้ว

    ну вот теперь у меня глаза то округлились

  • @denissavast
    @denissavast 2 ปีที่แล้ว

    Самый лучший канал ! Благодарю