Python을 사용하지 않는 Strings Imutabilidade

4351 단어 python
Você provavelmente já ouviu a seguinte frase:

Strings no Python são objetos imutáveis!

E foi correndo para o seu terminal escrever o seguinte código:


palavra = "abc"
palavra = "def" 
print(palavra)



  # Imprime "def"


Talvez tenha se perguntado por que esse programa funcionou... Afinal, se strings são objetos imutáveis ​​no Python, eu não estou alterando a variável palavra de "abc"para "def"? Ou seja, "mutando"esse valor?

Mais ou menos... Na verdade, estamos alterando a variável – que antes reference a string "abc"e passou a referencer a string "def"– mas o valor "abc"não foi alterado!

Mudando a referência da variável "palavra"

Para alterar o valor, ou seja, alterar a string imutável "abc"deveríamos fazer o seguinte:

palavra = "abc"
print(palavra[0]) 



 # Imprime o primeiro caractere, no caso "a "



palavra[0] = "x"  # Tenta alterar o primeiro caractere de "abc" para "x"


Ao executar esse exemplo, você vai obter o seguinte erro:

TypeError: 'str' 개체가 항목 할당을 지원하지 않습니다.

Já que strings no Python são imutáveis, não podemos atribuir um novo valor a uma string depois de criada – como tentamos fazer com palavra[0] = "x". 참고 que escrever palavra = alguma_coisa e depois palavra = outra_coisa é alterar qual objeto nossa variável reference, mas não o valor do objeto em si("abc").

무타벨 vs 이무타벨
Talvez seja mais fácil entender se compararmos com o exemplo de algum objeto mutável. Para isso, vamos utilizar a Lista(목록):

lista = ["a", "b", "c"] 



# Cria uma lista com 3 elementos onde cada elemento da lista é um caractere



palavra = "abc"  # Cria uma string com 3 caracteres




lista[0] = "x"
print(lista)  # Imprime ['x', 'b', 'c']



palavra[0] = "x"  # TypeError!


Python에 대한 개체 변경 사항을 목록에 추가하고, 용맹한 용기의 대체품을 변경합니다. 아니 카소, alteramos o valor do primeiro elemento da lista de "a"para "x".

Imutabilidade e economia de memória
Uma consequência interessante de objetos imutáveis ​​é a economia de memória. Já que a string é imutável, significa que não importa quantas variáveis ​​reference esta string, não precisamos nos preocupar em alocar memória múltiplas vezes (uma vez para cada variável), pois não existe or risco de o valor ser alterado.


x = "abc"  # Reserva um espaço de memória para armazenar o valor "abc"
y = "abc"  # Referencia o mesmo espaço de memória reservdo para "abc"



print(id(x) == id(y))  # Vai imprimir True!



Podemos verificar o endereço de memória de um objeto utilizando o método id(obj). 아니 예 예 Acima, declaramos duas variáveis ​​diferentes com o valor "abc"em cada uma delas. "abc"ser um valor imutável, Python otimizou a utilização de memória e fez com que ambas variáveis ​​(x e y) apontassem (ou reference) para o mesmo endereço de memória onde "abc"está armazenado.

Mais uma vez, vamos utilizar um exemplo utilizando listas (objeto mutável) para entender melhor:

x = ["a", "b", "c"]
y = ["a", "b", "c"]



print(id(x) == id(y))  # Vai imprimir False!



예를 들어 Acima vai imprimir False pois, apesar das listas x e y armazenarem os mesmos valores (3 elementos, onde cada elemento é um caractere), o interpretador Python vai reservar o espaço de memória necessário para as duas listas, pois listas são objetos mutáveis!

좋은 웹페이지 즐겨찾기