/ / Atribuição de variáveis ​​em Python [duplicado] - python

Atribuição de variáveis ​​em Python [duplicado] - python

Em Python, criei objetos inteiros e de lista da seguinte maneira:

a = 10
b = 10
x = []
y = []

Então eu obtenho os seguintes resultados ao comparar o id de a e be o id de x e y

id(a)==id(b)  returns True
id(x)==id(y) returns False

Em algum lugar eu li que a atribuição em Python nunca copia dados. Minha pergunta é por que xey não tem o mesmo id?

Respostas:

1 para resposta № 1

Você deve saber que inteiros python são armazenados em cache e inmutable, isso significa que ambos a e b estão rotulando o mesmo 10. Listas são objetos e eles são alocados separadamente, é por isso que seus ids são diferentes desde o início


1 para resposta № 2

As listas são mutáveis, se o mesmo objeto fosse usado, quando você adicionasse um item a uma lista, você também veria a mudança na outra.

A identidade de inteiros depende da implementação e geralmente é válida apenas para números pequenos; boa leitura Aqui.

A propósito, == é o operador de igualdade. Um caminho mais curto (e mais limpo) para id(a)==id(b) é usar o operador de identidade is. No seu caso: a is b.


0 para resposta № 3

x = [] é uma abreviação para instanciar uma nova lista, o que significa um novo objeto com um novo ID de objeto. Apesar de x e y são designadas como listas vazias, elas são simplesmente referências a locais de memória alocados para as respectivas listas. E se id(x) == id(y) então x e y compartilhariam o mesmo ID de objeto, o que efetivamente significaria que eles compartilham um local de memória ou são referências ao mesmo objeto (portanto, quaisquer alterações feitas em um se aplicariam ao outro).

Por outro lado, id(a) == id(b) porque ambos são inteiros, que são tipos de dados primitivos.