Olá Marcelo.
O que acontece é que quando rodamos a linha que cria função:
def visualizar_lista(lista = None):#lembrando: essa linha é lida apenas na primeira vez
if(lista == None):
lista = list()
print(len(lista))
print(lista)
lista.append(13)
Ela é rodada uma vez, e essa vez é quando você cria a função. Nesse momento o Python cria o objeto None e ele vai ser usada sempre que a função for chamada sem receber o parâmetro lista.
obs: Nesse ponto vale lembrar que a versão anterior dessa função def visualizar_lista(lista = []): esse era o momento que era criado um objeto na memoria que era uma lista e que seria usada sempre que o parâmetro lista não fosse passado.
Agora vamos analisar a primeira vez que chamarmos essa função sem mandar parâmetros:
visualizar_lista()
Nesse momento, já que não passamos o parâmetro o Python vai utilizar o objeto criado quando a função foi criado, o objeto None e ele vai ser usado na variável lista.
if(lista == None):
E já que lista recebeu o objeto None vamos entrar no if.
if(lista == None):
lista = list()
Dentro desse if o Python vai criar um objeto na memoria e ele será to tipo List e será salvo na variável lista.
if(lista == None):
lista = list()
print(len(lista))
print(lista)
lista.append(13)
Nas linhas seguintes, vamos imprimir o tamanho da lista, o conteúdo da lista e por ultimo vamos adicionar o numero 13 nessa lista.
Agora vamos analisar a segunda vez que chamarmos essa função sem mandar parâmetros:
visualizar_lista()
Nesse momento, já que não passamos o parâmetro o Python vai utilizar o objeto criado quando a função foi criado, o objeto None e ele vai ser usado na variável lista.
A partir desse ponto tudo vai se repetir como na primeira vez.
Acho que vale ressaltar que quando o parâmetro default da função era a criação da lista (def visualizar_lista(lista = []):), esse objeto List assim como o objeto None vai ser criado no momento que criamos a função e será usado na variável lista sempre que não mandarmos um parâmetro. Esse ponto é o mais importante para diferenciar os dois comportamentos dessas funções.
Espero ter ajudado a esclarecer, mas qualquer duvida não hesite em perguntar.
Bons Estudos