Análisis de Python de tipos inmutables

método

Como pregunta, entonces ¿por qué, porque los tipos inmutables son precisamente los tipos centrales de los tipos centrales de Python?
Por ejemplo, números, cadenas, se puede decir que todos los demás tipos se basan en estos tipos inmutables.

La tupla es por seguridad, y se elimina una lista de tipos de variables del método de variables y se usa en algunos entornos estrictos.
¡Los números y las cadenas son iguales, seguros y específicos!

estructura de datos

Las características del tipo de variable, los datos pueden aumentar o disminuir, las características de la variable y la identificación permanecen sin cambios, luego el aumento o disminución de los datos se basa en la edición del área de datos y el tamaño de los datos El área no es fija. Debido al problema de asignación de memoria, el área de datos no se puede vincular a id, por lo que el tipo de variable es id, es decir, la parte de datos del contenido de la variable almacena la dirección del área de datos y los datos area almacena la dirección de la variable del elemento, por lo que un enlace es una cadena, contenido del elemento adivinado.
En cuanto al tipo inmutable, su id lo es todo, lee la dirección variable del área al área de contenido variable. Es contenido directamente variable, generalmente longitud de contenido variable + contenido variable, como tuplas, cadenas y números enteros, pero también almacena el número de bloques de datos. Hay una pequeña cantidad de direcciones que no son muy útiles, como cadenas no ascii. Aunque están marcadas con direcciones, probablemente haya otras razones. Por ejemplo, la memoria entre ellas puede usarse para otros propósitos. En resumen, además de la derivación de tuplas, se moverán hacia adelante y hacia atrás en el proceso, pero cuando se genera el nombre de la variable, la tupla se empuja hasta el final.
En general, los tipos inmutables eliminan la necesidad de vincular el área de datos porque no es necesario ampliarlos.

Mecanismo variable de Python

1. Genere el contenido de la variable
2. Escriba el nombre de la variable y la dirección correspondiente en el área

Entonces, hay contenido primero, luego variables. Cuando las variables se reasignan:

1. Generar nuevo contenido de variable
2. Sobrescribir la dirección correspondiente al nombre de variable en el área con la dirección del nuevo contenido de variable
3. El sistema borrará el contenido de variable anterior

a=1
print((id('a').to_bytes(length=8, byteorder='little')+id(a).to_bytes(length=8, byteorder='little')).hex(' '))
# 30 93 cb 63 f7 01 00 00 30 69 a1 63 f7 01 00 00

for i in globals().copy(): 
	print(id(i).to_bytes(length=8, byteorder='little').hex(' '))
#
70 3b ca 1a 6d 02 00 00
b0 36 ca 1a 6d 02 00 00
70 90 15 1b 6d 02 00 00
b0 90 15 1b 6d 02 00 00
f0 90 15 1b 6d 02 00 00
b0 a9 cc 1a 6d 02 00 00
30 8d 17 1b 6d 02 00 00
30 88 1e 1b 6d 02 00 00
>>> globals()
{
    
    '__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {
    
    }, '__builtins__': <module 'builtins' (built-in)>, 'a': 1, 'i': 'a'}

Inserte la descripción de la imagen aquí

Puedes usar HxD para adjuntar el proceso y buscar la cadena obtenida. Generalmente, solo hay un resultado de búsqueda, que es un espacio para almacenar variables globales.
Agregando variables y modificando variables, puedes determinar que este es ese espacio.
Use el método globals para obtener las variables en los globales. Si no usa .copy para obtener una copia de globals (), el valor de globals () cambiará y se informará un error durante el ciclo for. La salida el resultado es 8 y la captura de pantalla es 9 Uno, porque cuando se ejecuta el for, se genera una variable i. Incluso si el for está terminado, si no se borra i, existirá.

La asignación aquí es, sin duda, la dirección del contenido de la variable, es decir, el resultado de id (a) ha cambiado. No se puede decir que la variable actual sea la variable anterior.
Esta es también la única forma de modificar el tipo inmutable de una variable de escritura, por ejemplo, str1 = str2 + str1

Supongo que te gusta

Origin blog.csdn.net/jhsxy2005/article/details/114030113
Recomendado
Clasificación