Acho que internamente eles são implementados como listas vinculadas e não como arrays. A diferença é que é muito caro adicionar um item a uma matriz, porque o tamanho de uma matriz é declarado, então a memória contígua é alocada para ela. Por causa disso, não há garantia de que o próximo bloco contíguo de memória esteja disponível para o array, e um novo array de tamanho (origArray + 1) deve ser criado, o array antigo copiado e o novo elemento copiado também . Eu não tenho nenhuma prova disso, claro, além da experiência de programação e observando o comportamento do PowerShell.
Atualizar
Eu tenho provas! Evitando o operador de lista vs Como uma matriz é declarada no powershell. Observe o usuário do cmdlet New-Object
ao declarar uma matriz:
PS > $myArray = New-Object string[] 10
Então, o que você está interagindo na linha de comando são duas listas vinculadas. Não tenho certeza de como o Powershell / .NET manipula a cópia de listas vinculadas, embora pareça a partir do seu exemplo que $b
simplesmente mantém os mesmos ponteiros que $a
, mas quando você adiciona um item a $b
ou $a
não aparece no outro, a menos que explicitamente copiado novamente. Eu gosto de me referir a isso como um static copy
, embora eu não saiba se esse termo tem uso no campo.