Existe alguma razão para fazer algo mais complicado do que uma dessas duas linhas quando você deseja limpar uma lista no Python?
old_list = []
old_list = list()
A razão pela qual pergunto é que acabei de ver isso em algum código em execução:
del old_list[ 0:len(old_list) ]
a[:x]
significa começar x ea[x:]
significa x terminar.a[ 0:len(a) ]
pode ser escrito comoa[:]
. Você também pode usar negativos para contar a partir do final (a[-1]
é o último elemento).Respostas:
Limpar uma lista no local afetará todas as outras referências da mesma lista.
Por exemplo, este método não afeta outras referências:
Mas este faz:
Você também pode fazer:
fonte
del a[:]
a
? Eu penseia
eb
referência ao mesmo objeto ... Só quero saber o porquê. Obrigado.a.clear()
, sem problemas!Fazer
alist = []
não limpa a lista, apenas cria uma lista vazia e a vincula à variávelalist
. A lista antiga ainda existirá se tivesse outras ligações de variáveis.Para realmente limpar uma lista no local , você pode usar qualquer uma destas maneiras:
alist.clear() # Python 3.3+, most obvious
del alist[:]
alist[:] = []
alist *= 0 # fastest
Consulte a página de documentação Tipos de sequência mutável para obter mais detalhes.
fonte
Existe uma maneira muito simples de limpar uma lista python. Use del list_name [:] .
Por exemplo:
fonte
Parece-me que del devolverá a memória, enquanto atribuir uma nova lista fará com que a antiga seja excluída apenas quando o gc executar.matter.Isso pode ser útil para listas grandes, mas para listas pequenas deve ser insignificante.
Edit : Como Algorias, não importa.
Observe que
é equivalente a
fonte
Exclui os valores dessa variável de lista
Exclui a própria variável da memória
fonte
Há dois casos em que você pode querer limpar uma lista:
old_list
ainda mais no seu código;No caso 1, você apenas continua com a atribuição:
No caso 2, a
del
instrução reduziria a contagem de referência ao objeto da lista para o qual o nomeold list
aponta. Se o objeto da lista for apontado apenas pelo nomeold_list
, a contagem de referência será 0 e o objeto será liberado para coleta de lixo.fonte
Se você estiver limpando a lista, obviamente não precisará mais da lista. Nesse caso, você pode excluir a lista inteira simplesmente pelo método del.
Mas, se você precisar novamente, poderá reinicializá-lo. Ou simplesmente limpe seus elementos
fonte
outra solução que funciona bem é criar uma lista vazia como uma lista vazia de referência.
por exemplo, você tem uma lista como
a_list = [1,2,3]
. Para limpar, faça o seguinte:isso fará
a_list
uma lista vazia como aempt_list
.fonte