Referenciando primitivos globais x objetos
Alguém poderia explicar o seguinte resultado em Python?
Ao executar o seguinte trecho de código, o Python gera um erro, dizendo que a variávelx
foi referenciado antes da atribuição:
x = 1
def increase_x():
x += 1
increase_x()
A solução, é claro, seria incluir a linhaglobal x
após a declaração da função paraincrease_x
.
No entanto, ao executar este próximo trecho de código, não há erro, e o resultado é o que você espera:
x = [2, -1, 4]
def increase_x_elements():
for k in range(len(x)):
x[k] += 1
increase_x_elements()
Isso ocorre porque números inteiros são primitivos em Python (em vez de objetos) e assimx
no primeiro trecho é um primitivo armazenado na memória enquantox
no segundo trecho faz referência a um ponteiro para um objeto de lista?