Рубрики
Без рубрики

Изменяемые объекты против функций Python.

Мы знаем, что все в python является объектом и может быть классифицировано на изменяемые и …

Автор оригинала: Ogunbiyi Ibrahim.

Мы знаем, что каждая вещь в python является объектом и может быть классифицирована на изменяемый и неизменяемый, где изменяемый объект-это объект, состояние которого может измениться после построения, в то время как последний-это объект, состояние которого не может быть изменено после построения.

фрагмент кода, сделанный довольно фрагмент кода, сделанный довольно

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

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

фрагмент кода, сделанный довольно фрагмент кода, сделанный довольно

В этом фрагменте кода выше у меня есть переменная “leader_board” , которая ссылается на объект словаря, содержащий данные оценки leaderboard, также есть функция, которая добавляет нового члена в мою таблицу лидеров, функция “add_new_member” принимает объект словаря таблицы лидеров, имя нового члена и счет, когда эта функция вызывается и передается в объект “leader_board” , имя нового члена (‘janet’) и счет (12).

leader_board[имя]

Это состояние выше внутри функции добавляет новый ключ:данные пары значений к объекту leaderboard в памяти.

когда функция “add_new_member” вызывается, она ссылается на объект leader_board в памяти и изменяет значение на месте, когда leader_board печатается внутри функции, которую мы получаем.

{‘{‘джеймс’: 23, ‘доу’: 20, ‘мар’: 15, ‘джанет’: 12}

Кроме того, когда объект leader_board печатается вне функции, мы получаем тот же результат. Чтобы подтвердить это, давайте запустим объектный тест, обновив код для возврата leader_board из функции и используя оператор “is” для выполнения объектного теста.

фрагмент кода, сделанный довольно фрагмент кода, сделанный довольно

print(результат-leader_board)

Это приведенное выше утверждение вернет True, поскольку оператор “is” проверяет, ссылаются ли два операнда, то есть result и leader_board, на один и тот же объект и имеют одинаковое значение.

Я также добавил новый блок кода ниже в кодовую базу, чтобы показать, что оператор “is” на самом деле делает то, что делает оператор “print( leader_board is leader_board_2)” вернет False, потому что эти два объекта являются разными объектами в памяти, даже если они имеют одни и те же данные, они должны ссылаться на один и тот же объект.

Преодоление вселенной

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

фрагмент кода, сделанный довольно фрагмент кода, сделанный довольно

С новой обновленной кодовой базой выше, теперь используя метод “copy” с изменяемым объектом , возвращаем неглубокую копию данных и создаем новый объект в памяти, и вы можете видеть, что наш “result” объект отличается от “leader_board” объекта, когда мы делаем объектный тест “print(result is leader_board)” мы получаем False, чтобы показать, что они не являются одним и тем же объектом в памяти.

Примечание: вся история выше относится и к объекту списка, он также изменчив.

Вывод

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

Не забудь поделиться этим со своими собратьями-пифонистами, может быть, ты спасешь душу.

Спасибо.