Quando escrevemos scripts grandes ou códigos com muitas linhas, o gerenciamento de memória deve ser nossa maior prioridade. Portanto, devemos ter bons conhecimentos de manipulação eficiente de memória, além de bons conhecimentos de programação. Temos muitas funções fornecidas em Python para obter o tamanho na memória de um determinado objeto presente no programa, e uma dessas funções é __sizeof__(). Neste tutorial, aprenderemos sobre a função __sizeof__() e seu funcionamento dentro de um programa Python.
Função Python __sizeof__()
A função __sizeof__() em Python não nos diz exatamente o tamanho do objeto. Ele não retorna o tamanho de um objeto gerador, pois o Python não pode nos dizer de antemão qual é o tamanho de um gerador. Ainda assim, na verdade, ele retorna o tamanho interno de um determinado objeto (em bytes) que ocupa a memória.
Para entender isso, vejamos o seguinte programa de exemplo com um objeto gerador infinito.
diagrama de classes java
Exemplo 1: Observe o seguinte programa Python:
# A default function with endless generator object in it def endlessGenerator(): # A counting variable to initialize the generator counting = 0 # Using while loop to create an endless generator while True: yield counting counting += 1 # Creating infinite loop # Printing memory size of a generator object print('Internal memory size of endless generator object: ', endlessGenerator.__sizeof__())
Saída
Internal memory size of endless generator object: 120
Explicação:
Usamos uma função padrão, ou seja, infinitaGenerator(), para criar um objeto gerador infinito no programa. Na função, inicializamos uma variável, ou seja, contagem = 0. Usamos um loop while na variável de contagem sem fornecer um ponto de interrupção no loop. Ao criar um loop infinito na função, tornamos a função padrão um objeto gerador infinito. Finalmente, imprimimos o tamanho da memória interna do objeto gerador infinito usando a função __sizeof__().
história em java
Agora, podemos entender claramente o funcionamento da função __sizeof__(). Como o objeto gerador infinito no programa acima não tem nenhum fim ou ponto de interrupção, o Python não pode nos dizer o tamanho do gerador de antemão. Mas, ao mesmo tempo, podemos verificar o tamanho da memória interna atribuída ao objeto gerador pela função __sizeof__(), pois deve estar ocupando alguma memória interna em Python.
Vejamos mais um exemplo onde usamos a função __sizeof__() para obter o tamanho da memória interna sem qualquer sobrecarga.
Exemplo 2:
# Define an empty list in the program emptyList = [] # Printing size of empty list print('Internal memory size of an empty list: ', emptyList.__sizeof__()) # Define some lists with elements a = [24] b = [24, 26, 31, 6] c = [1, 2, 6, 5, 415, 9, 23, 29] d = [4, 5, 12, 3, 2, 9, 20, 40, 32, 64] # Printing internal memory size of lists print('Memory size of first list: ', a.__sizeof__()) print('Memory size of second list: ', b.__sizeof__()) print('Memory size of third list: ', c.__sizeof__()) print('Memory size of fourth list: ', d.__sizeof__())
Saída
comentário do powershell multilinha
Internal memory size of an empty list: 40 Memory size of first list: 48 Memory size of second list: 104 Memory size of third list: 104 Memory size of fourth list: 136
Explicação:
Usando a função __sizeof__(), podemos ver claramente que o tamanho da memória interna de uma lista vazia é de 40 bytes e cada elemento presente na lista adiciona 8 bytes ao tamanho total da memória da lista.