Логический порядок добавления значений в список (python) - PullRequest
0 голосов
/ 05 февраля 2019

Я заметил ошибку в логическом порядке моего кода при попытке добавить значение в список, мой код работает в любом случае.Два примера ниже иллюстрируют проблему.Может кто-нибудь сказать мне, что происходит в первом примере?

# example 1    
text_1 = []    
a_1 = []    
text_1.append(a_1)    
a_1.append('BBB') # this command should be before the last one    
print('text 1: ',text_1) # prints [['BBB']]
# example 2    
text_2 = []    
a_2 = []    
text_2.append(a_2)    
a_2 = ['BBB'] # this command should be before the last one    
print('text 2: ',text_2) # prints [[]]

1 Ответ

0 голосов
/ 05 февраля 2019

Простой ответ здесь - переменные ссылаются на адреса памяти.В первом примере вы изменяете данные по этому адресу памяти .Во втором примере вы меняете адрес памяти, к которому переменная относится .Я прокомментировал ваши примеры, чтобы прояснить разницу:

Пример 1:

text_1 = []    
a_1 = []            # a_1 refers to a pointer somewhere in memory
                    # Let's call it LOC_A
                    # The data at LOC_A is [].
text_1.append(a_1)  # appends whatever data is at a_1 as the last element
                    # a_1 == LOC_A -> []
                    # text_1 == [LOC_A] == [[]]
a_1.append('BBB')   # LOC_A -> ['BBB']
                    # text_1 == [LOC_A] == [['BBB']]   
print('text 1: ',text_1)  # prints [['BBB']]

Пример 2:

text_2 = []    
a_2 = []            # a_2 refers to a pointer somewhere in memory
                    # let's call this location LOC_A
text_2.append(a_2)  # appends whatever data is at LOC_A as the last element
                    # a_2 == LOC_A -> []
                    # text_1 == [LOC_A] == [[]]
a_2 = ['BBB']       # a_2 now refers to a  different pointer, LOC_B
                    # a_2 == LOC_B -> ['BBB']
                    # LOC_A has not changed, is still [], and text_1 still refers to it
                    # text_1 == [LOC_A] == [[]]  
print('text 2: ',text_2)  # prints [[]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...