Разница между PHP и Python в назначении?

1

Я изучил PHP, и теперь я изучаю Python. Я написал этот код на обоих языках, но его поведение отличается.

PHP:

<?php
        $x = [];
        $y = $x;
        $x['key'] = 'value';
        var_dump($x);
        var_dump($y);

Python:

    x = {}
    y = x
    x['key'] = 'value'
    print(x)
    print(y)

y имеет значение null в PHP, но не в Python.

Я хочу знать, почему..

  • 1
    Понимание того, как работает назначение, очень важно в Python. Поверх значения / ссылки он также подставляет / влияет на объявление переменной / область / тип. Пожалуйста, найдите время, чтобы учиться и избежать укуса позже
  • 0
    tldr; Массивы в PHP клонируются / дублируются при присваивании (на самом деле это более сложно, чем это, и копия ловко откладывается, но после присваивания фактически есть два массива). В Python ни один объект не клонируется / дублируется при назначении , в том числе словари / списки, поэтому есть еще один словарь ... с двумя разными именами. Это также объясняет различия в поведении при передаче массивов в PHP и списков в Python. Назначение объектов PHP работает так же, как и в Python.
Теги:
variable-assignment

2 ответа

4

В PHP, когда вы назначаете $y = $x, он копирует массив. В Python словари - это объекты, и вы просто копируете ссылку, а не словарь. Если вы хотите скопировать словарь, это метод для этого:

x = {}
y = x.copy()
x['key'] = 'value'
print(x)
print(y)
  • 0
    Спасибо, это очень полезно ..
  • 0
    Не совсем верно в отношении php. PHP - это копирование при записи, а не копирование при назначении.
Показать ещё 4 комментария
0

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

например,

    x =23

Изображение 174551

Теперь сделайте то, что вы делали раньше:

    x = 23
    y = x

Изображение 174551

Как вы можете видеть, два значения не создаются, а два имени указывают на то же значение 23.

Итак, я думаю, вы сейчас понимаете ситуацию. оба указывают на одно значение.

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

  • 0
    Хотя это содержит правдивую информацию, вводный вывод вводит в заблуждение; назначение объектов в PHP работает так же, как и в Python. Это назначение и передача массивов в PHP отличается тем, что имеет семантику клонирования / копирования.
  • 1
    Также при присвоении неизменных примитивных значений - например. «целые числа» - реализованы по-разному, на практике они семантически эквивалентны. Это делает целые числа особенно плохими примерами, чтобы попытаться проиллюстрировать поведение; словарь / список был бы намного лучшей целью и более точно соответствовал бы вопросу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню