68 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			68 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | |||
|  | title: Python Mutability and Variable Assignments | |||
|  | localeTitle: Mutabilidade de Python e atribuições variáveis | |||
|  | --- | |||
|  | > Todo objeto tem uma identidade, um tipo e um valor. A identidade de um objeto nunca muda depois de ter sido criada; você pode pensar nisso como o endereço do objeto na memória. [fonte](https://docs.python.org/3/reference/datamodel.html#data-model)
 | |||
|  | 
 | |||
|  | Depois que um `object` é criado, o tipo e a identidade não podem ser alterados. Se o valor do objeto pode ou não mudar após a criação determina se o objeto é mutável (pode mudar) ou imutável (não pode mudar). | |||
|  | 
 | |||
|  | Até agora aprendemos sobre alguns tipos de objetos e suas subclasses: `string` s e objetos numéricos (inteiro, ponto flutuante, complexo e booleano). Todos esses são objetos **imutáveis** . | |||
|  | 
 | |||
|  | Esse conceito pode ser confuso no começo porque o que é bom é um objeto se você não puder modificá-lo. O que torna esses objetos utilizáveis é a capacidade de atribuir e reatribuir variáveis. Funções e operadores podem retornar novos objetos que podem ser atribuídos a variáveis. | |||
|  | 
 | |||
|  | Usando a [função id integrada](https://docs.python.org/3/library/functions.html#id) , que retorna a identidade de um objeto, podemos ver como isso funciona. | |||
|  | 
 | |||
|  | Aqui estão algumas coisas para manter em mente: | |||
|  | 
 | |||
|  | *   Atribuir uma variável não significa que a _variável_ é o _objeto_ . Usamos uma linguagem muito específica, observando que as _instruções de atribuição_ **associam** um **nome** (identificador) a um _objeto_ . Variáveis podem ser reatribuídas: | |||
|  | 
 | |||
|  | \`python | |||
|  | 
 | |||
|  | > > > a = 1 # Vincule um a um objeto.  
 | |||
|  | > > > id (a)  
 | |||
|  | > > > 140355241530152  
 | |||
|  | > > > a = 2 # Rebinde um para outro objeto.  
 | |||
|  | > > > id (a)  
 | |||
|  | > > > 140355241530128  
 | |||
|  | > > > \`
 | |||
|  | 
 | |||
|  | *   Atribuir duas variáveis diferentes a _objetos imutáveis_ com o mesmo valor pode resultar (não garantido) neles sendo vinculados ao mesmo _objeto_ | |||
|  | 
 | |||
|  | \`python | |||
|  | 
 | |||
|  | > > > a = 1  
 | |||
|  | > > > b = 1  
 | |||
|  | > > > id (a)  
 | |||
|  | > > > 140355241530152  
 | |||
|  | > > > id (b) # Neste caso aeb estão ligados ao mesmo objeto.  
 | |||
|  | > > > 140355241530152  
 | |||
|  | > > > \`
 | |||
|  | 
 | |||
|  | *   Atribuir duas variáveis diferentes a _objetos imutáveis_ com valores diferentes sempre resultará na vinculação a _objetos_ diferentes: | |||
|  | 
 | |||
|  | \`python | |||
|  | 
 | |||
|  | > > > a = 1  
 | |||
|  | > > > b = 2  
 | |||
|  | > > > id (a)  
 | |||
|  | > > > 140355241530152  
 | |||
|  | > > > id (b) # aeb estão ligados a objetos diferentes.  
 | |||
|  | > > > 140355241530128  
 | |||
|  | > > > \`
 | |||
|  | 
 | |||
|  | *   A reatribuição de variáveis não altera o objeto original, ele as liga a um objeto diferente. | |||
|  | 
 | |||
|  | \`python | |||
|  | 
 | |||
|  | > > > a = 1  
 | |||
|  | > > > b = 1  
 | |||
|  | > > > id (a)  
 | |||
|  | > > > 140355241530152  
 | |||
|  | > > > id (b)  
 | |||
|  | > > > 140355241530152  
 | |||
|  | > > > a = 2  
 | |||
|  | > > > id (a) # a é rebatido para um objeto diferente.  
 | |||
|  | > > > 140355241530128  
 | |||
|  | > > > id (b) # b ainda está vinculado ao objeto original.  
 | |||
|  | > > > 140355241530152  
 | |||
|  | > > > \`
 |