Почему словарь будет изменен экземпляром класса, но целое число не будет - PullRequest
0 голосов
/ 03 декабря 2018

Я изучаю класс Python.В скрипте игрушечного питона

class test():
    def __init__(self, a, b):
        self.new = a
        self.old = b

    def another_one(self):
        temp = self.new
        for key in temp.keys():
            temp[key] += 1

    def old_one(self):
        old = self.old
        old += 1

a = {'1': 1, '2': 2, '3': 3, '4': 4, '5': 5}
b = 5
test_pass = test(a, b)
test_pass.another_one(), test_pass.old_one()
a, b

я обнаружил, что при запуске метода another_one экземпляра test_pass словарь a будет изменен.Однако целое число b не будет изменено при запуске метода old_one.

Почему словарь будет изменен, а целое - нет?

1 Ответ

0 голосов
/ 04 декабря 2018

Целые числа Python являются неизменяемыми, их нельзя изменить на месте .

Взгляните на следующий фрагмент:

x = 2
print(id(x))
x += 1
print(id(x))

x = [2]
print(id(x))
x += [1]
print(id(x))

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

При изменении списка его id () не меняется, список меняется на месте .

Целое число является неизменным, они не могут волшебным образом превращаться во что-то другое.Списки могут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...