Ir ao conteúdo

Posts recomendados

Postado

Olá pessoas, estou estudando o conceito de Composição em Pyhton, OO. Nesse caso, estou tentando entender como se dá a ligação entre duas classes e seus objetos. Minha dúvida é: Dado que, ao criar um objeto, seria reservado um espaço na memória para o mesmo, esse espaço inclui o objeto pelo qual é composto?

Exemplo:

class Cliente:
    def __init__(self, nome, idade):
        self.nome = nome
        self.idade = idade
        self.enderecos = []
        
    def insereEnderecos(self, cidade, estado):
        self.enderecos.append(Endereco(cidade, estado)) #Aqui é criado o objeto em questão

    def listaEnderecos(self):
        for endereco in self.enderecos:
            print(endereco.cidade, endereco.estado)

class Endereco:
    def __init__(self, cidade, estado):
        self.cidade = cidade
        self.estado = estado

Nesse exemplo, o objeto da classe "Endereco" está sendo armazenado no espaço de memória reservado para seu respectivo cliente? Seria por isso que, ao deletar um cliente, é deletado também o respectivo endereço?

 

Grata desde já! :)

Postado

@milhodasilva Bom, acredito eu que Python não é a melhor linguagem para se iniciar estudando sobre memória. Como Python interpreta tudo como objetos (sem considerar os "tipos primitivos") e ainda você consegue dinamicamente criar atributos para os objetos, o Python "reserva bastante memória" por que ele "não sabe o quanto vai precisar de memória" para fazer o código realizar todas as operações.

 

Exemplo: como ele vai saber que aquele array enderecos é um array de int (que são 4 bytes) ou um array de objetos de uma classe que ocupa 1mb? Inclusive o Python trata diferentemente a memória de objetos e não objetos.

 

 

Recomendo uma leitura mais aprofundada sobre como funciona o gerenciador de memória no Python/CPython.

 

Sobre a dúvida: quando você cria um objeto Endereco dentro do objeto de um Cliente, o Python irá criar um ponteiro (que no fundo, tudo no Python é um ponteiro) do tipo Cliente que aponta para algum lugar na memória onde realmente os dados estão.

 

Se você deletar a referencia deste ponteiro dentro do Cliente (e não tiver mais nenhuma outra referencia a ele), o garbage collector vai fazer a liberação da memória. Também vale a pena dar uma lida mais profunda sobre.

 

Espero ter ajudado,

Abs,

Nícolas.

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!