Comentário a Como posso evitar declarar uma variável não utilizada em um loop for? (O tamanho do comentário acabou)
Python mantém a mesma referência para o objeto criado. (independentemente da mutabilidade), por exemplo,
In [1]: i = 1
In [2]: j = 1
In [3]: id(i)
Out[3]: 142671248
In [4]: id(j)
Out[4]: 142671248
Você, pode ver tanto i como j, referem-se ao mesmo objeto na memória. O que acontece, quando mudamos o valor de uma variável imutável.
In [5]: j = j+1
In [6]: id(i)
Out[6]: 142671248
In [7]: id(j)
Out[7]: 142671236
você pode ver que j agora começa a apontar um novo local, (onde 2 está armazenado) e i ainda aponta para o local onde 1 está armazenado. Durante a avaliação,
j = j+1
O valor é escolhido de 142671248, calculado (se ainda não estiver em cache) e colocado em um novo local 142671236. j é feito para apontar para o novo local. Em termos mais simples, uma nova cópia feita toda vez que uma variável imutável é modificada.
Mutabilidade
Objetos mutáveis agem um pouco diferente a esse respeito. Quando o valor apontado por
In [16]: a = []
In [17]: b = a
In [18]: id(a)
Out[18]: 3071546412L
In [19]: id(b)
Out[19]: 3071546412L
Tanto a quanto b apontam para o mesmo local de memória.
In [20]: a.append(5)
A localização da memória apontada por um é modificada.
In [21]: a
Out[21]: [5]
In [22]: b
Out[22]: [5]
In [23]: id(a)
Out[23]: 3071546412L
In [24]: id(b)
Out[24]: 3071546412L
Ambos, aeb, ainda apontam para o mesmo local de memória. Em outras palavras, variáveis mutáveis atuam na mesma localização da memória apontada pela variável, ao invés de fazer uma cópia do valor apontado pela variável, como no caso de variável imutável.