3
respostas

Strings iguais sempre são guardadas no mesmo lugar da memória?

Estava dando uma brincada com essas coisas de memoria, e me surgiu a dúvida referente ao ==, já que o mesmo retorna True quando comparamos duas string iguais, mas se ele compara a posição na memoria e não o conteudo, como a situação a baixo retorna True? Visto que eu tenho duas variaveis com o mesmo valor, porém teoriamente não era pra elas estarem em lugares distintos? Visto que a posição do nome1 está?

nome = 'Vitor'
nome1= {'nome' : 'Vitor')

id(nome)
#2589309981680

id(nome1)
#2589309677824

id(nome1['nome'])
#2589309981680
3 respostas

Como a dúvida descrita no tópico ficou muito confuso de entender para mim, vou responder o título, no final me diga se era isso, tudo bem?

Para fins de desempenho, não há necessidade de alocar o mesmo valor em outro endereço, visto que muito mais prático armazenar esse valor em um único bloco e para todas variáveis que utilizam esse mesmo valor, utilizar um ponteiro que aponte para esse valor.

Imagine 5 variaveis do tipo string guardando a mesma string:

var1 = "Texto"
var2 = "Texto"
var3 = "Texto"
var4 = "Texto"
var5 = "Texto"

Em vez de reservar 5 espaços diferentes na memória, você guarda em apenas 1 espaço e pra todas essas variáveis você diz: "seu valor está nesse endereço". Se ocorrer de alguma dessas variáveis ter seu valor trocado, aí sim haverá a necessidade de alocar esse novo valor em outro lugar na memória.

Isso responde a dúvida ?

Entendi, mas isso é independente da variavél?

Até mesmo se a variavel por uma propriedade de uma obj, sempre vai ser o mesmo local de memoria se for o mesmo "valor?"

Desde que o "valor" seja o mesmo, suponho que em quase todas hipóteses estariam no mesmo endereço, e cada variável que queira acessar esse valor receberia o endereço de onde esse valor está armazenado.

Rode o scritp que fiz abaixo e veja, 3 variáveis diferentes do tipo inteiro e 3 variáveis diferentes do tipo string, vamos imprimir no console o endereço de seus valores:

a = 10
b = 10
c = 10
d = "Texto"
e = "Texto"
f = "Texto"

print(hex(id(a)))
print(hex(id(b)))
print(hex(id(c)))
print(hex(id(d)))
print(hex(id(e)))
print(hex(id(f)))

Agora teste o exemplo com outros casos e conte para nós seus resultados :)