# 代码一
list1 = []
dict1 = {}
for i in range(5):
dict1 = {"one": i}
list1.append(dict1)
print(list1) # [{'one': 0}, {'one': 1}, {'one': 2}, {'one': 3}, {'one': 4}]
# 看一下列表的id值
for id_value in map(lambda x: id(x), list1):
print(id_value)
entiendo
-
Fuera del bucle crea un diccionario vacío y una variable y asignación. Sabemos que en Python, un objeto es en realidad una referencia a la asignación de un objeto, es decir, cuando una variable a otra asignación de variables, la transferencia de la dirección, también lo hará
dict1
esta variable y{}
el diccionario vacío agrupados, odict1
señalador{}
-
Cada vez que el diccionario se crea en el bucle
{"one": i}
se abrirá un nuevo espacio en la memoria utilizada para almacenar el diccionario, y cada una de las misiones y lo harádict1
esta variable a punto para el nuevo diccionario como{"one":0}
-
A continuación,
list1
llevar a caboappend
la operación, supongo (ya confirmada) operación de anexión se lleva a cabo, en realidad se agrega该对象的引用
, por lo que cada vez que se añada cada diccionario (referencias) dirección de memoria del entrantelist1
-
Vistazo a
list1
la identificación (que puede volver a identificar de manera única un objeto)['1593305955784','1593305955496','1593306802432'...]
, prestar atención a la parte interior de la identificación no son los mismos -
La lista contiene la dirección de memoria de los diferentes diccionarios, generando así una lista final es una lista de los valores respectivos no son los mismos
# 代码二
list2 = []
dict2 = {}
for i in range(5):
dict2["one"] = i
print(dict2) # 依次输出 {'one': 0},{'one': 1},{'one': 2},{'one': 3},{'one': 4}
list2.append(dict2)
print(list2) # [{'one': 4}, {'one': 4}, {'one': 4}, {'one': 4}, {'one': 4}]
# 看一下列表的id值
for id_value in map(lambda x: id(x), list1):
print(id_value)
entiendo
- La salida puede verse,
dict2["one"] = i
cada vez que el diccionario acaba dedict2
modificar el resultado final de la última modificación retenida, y no como un nuevo diccionario como un Código - Trate de analizar el proceso de
- En primer lugar abrir un diccionario y asignado al área de ventilación en la memoria
dict2
(de referencia)
- Modificación de cada ciclo
dict2
pieza zona puntiaguda
- Después de la
dict2
memoria a la que apunta la dirección de datos anexados a la memoria diccionariolist2
en
- Pero cada vez
dict2["one"] = i
y ningún nuevo diccionario es siempre en el diccionariovalue
reescritura, y ningún nuevo diccionario, un diccionario está sólo empezando a extremo, por lo que cada vez que append es la misma dirección de memoria
- Podemos utilizar para mirar esta lista de ID ,
['2966419766368','2966419766368','2966419766368'...]
, encontramos que ID es el mismo
- Porque desde un valor corresponde a una sola llave, una tecla varias veces en el valor, el valor de este último se sobreponen a la parte delantera, por lo que el último
list2
valor del valor de la última modificación al diccionario para prevalecer. La lista contiene la misma dirección de memoria, generando así una lista final es una lista de valores respectivos son los mismos
- En primer lugar abrir un diccionario y asignado al área de ventilación en la memoria
copia superficial copiar sólo la referencia de objeto, se presenta esta situación se puede resolver profunda copiar
contenido antes mencionado representa sólo puntos de vista personales, no autorizadas, se parecen a ...