Y recogida de basura copia profundidad de pitón y con la declaración

profundidad de una copia

  • copia superficial: independientemente de la complejidad de estructuras de datos, copia superficial sólo copiar uno
  • Profundo una DeepCopy : copia profunda copia completamente original de todas las variables relevantes de datos para generar un conjunto de exactamente el mismo contenido en la memoria, modificamos cualquiera de estas dos variables no afectará a las otras variables
    Aquí Insertar imagen Descripción

recolección de basura pitón

  • contador de referencias

    • principio
      • Cuando se crea o un objeto copiado una referencia, contador de referencia del objeto se incrementa, cuando un objeto de referencia es destruido, el recuento de referencia de objeto en 1.
      • Cuando el recuento de referencia de objeto se reduce a cero, significa que el objeto no se ha utilizado una vez más, su memoria puede ser liberada.
    • ventaja
      • El recuento de referencia tiene una gran ventaja de que en tiempo real, cualquier memoria, una vez que no hay ninguna referencia a ella, se recuperará de inmediato, mientras que otros se niegan técnicas de recolección tienen que reivindicar la memoria no válida bajo ciertas condiciones especiales.
    • defecto
      • Mantenimiento de mecanismo de recuento de referencia trajo referencia asignación de memoria y la liberación de operaciones adicionales en Python corriendo recuento llevado a cabo, misiones citas es proporcional,
      • Fue sólo en relación con la recuperación de la cantidad de memoria a ser menos eficientes que los de otras tecnologías adicionales de recolección de basura operativo trae.
      • Al mismo tiempo, debido a las referencias mutuas entre los objetos, cada uno referencias a objetos no será cero, por lo que estos objetos siempre están ocupados por la memoria no se dará a conocer.
  • Marcos - Claro

    • Se divide en dos fases: la primera fase está marcada, GC estará marcado con marcas de todos los objetos activos, la segunda etapa es los objetos que no están marcadas objetos inactivos para el reciclaje.
    • Entre los objetos vinculados por referencia (puntero) para formar un grafo dirigido
    • Desde el objeto raíz (objeto raíz) de la salida, hay marcadas a lo largo de la travesía objetos a un lado, accesible (accesible) objetos para el objeto activo, objetos inactivos objeto inalcanzable es que se solucione.
    • El objeto raíz es variables globales, la pila de llamadas, registros.
    • Aquí Insertar imagen Descripción
    • En la figura, las variables del programa pueden no acceder directamente desde el bloque 1, y se puede acceder indirectamente los bloques 2 y 3, pueden bloques de acceso 4 y 5
    • El primer paso está marcando los bloques 1, 2 y 3 y recordar bloques para el procesamiento posterior.
    • Paso 2 El bloque marcador, un tercer paso el bloque marcador de 3, bloque 2, pero no puede recordar, ya que se ha marcado.
    • Bloquear fase de exploración 2 y 3 serán ignorados, porque han sido marcados, pero el bloque de recuperación 4 y 5.
  • la recuperación generacional

    • el modo de operación de recuperación generacional se establece en la técnica sobre la base de clara de marcado, un espacio de tiempo.
    • Python memoria se divide en tres "generaciones", respectivamente, para la generación joven (generación 0), en el año (primera generación), el año de edad (segunda generación)
    • Corresponden a las tres listas, que aumentan la frecuencia del tiempo de supervivencia objeto recolección de basura reducida .
    • Los objetos recién creados se asignan de la generación joven, el número total de la generación joven de la lista alcanza el límite superior, se activará Python mecanismo de recolección de basura
    • Esos objetos se pueden reciclar reciclaje, y esos objetos no son recuperados serán trasladados en años para ir, etc.
    • La vieja era de los objetos es el tiempo de supervivencia más larga del objeto, o incluso sobrevivir en el ciclo de vida del sistema.

con la declaración

Lo que es con la declaración

  • con un protocolo de gestión de contexto objeto de la prueba diagrama de flujo, excepto las palabras clave y la asignación de recursos, y finalmente liberar todo el código correspondiente retira, tratar ... ... .except simplificado de flujo del proceso de .finlally.
  • Por lo tanto, con el uso de objeto de tratamiento debe entrar método de los dos () y la salida ()
    • Por entrar con método de inicialización (método de entrar en funcionamiento antes de que el ejecutor declaración)
    • A continuación, hacerlo tan bien como consecuencia de las excepciones de la manija de salida (exit () se ejecuta método después el cuerpo de la declaración es la salida final)

con escenarios de uso declaración

  • Declaración para la ocasión con el acceso a los recursos, asegurando que, independientemente de si se produce una excepción en el curso de la ejecución de la operación necesaria "limpieza", la liberación de los recursos
  • Por ejemplo, el archivo se apaga automáticamente después de su uso, el seguro de rosca automáticamente adquieren y liberación.
  • Ejemplos de documentos con las operaciones de proceso
with open('/etc/passwd') as f:
    for line in f:
        print(line)
  # 这段代码的作用:打开一个文件,如果一切正常,把文件对象赋值给f,然后用迭代器遍历文件中每一行,当完成时,关闭文件;

  # 而无论在这段代码的任何地方,如果发生异常,此时文件仍会被关闭。
Publicado 84 artículos originales · ganado elogios 1 · vistas 2067

Supongo que te gusta

Origin blog.csdn.net/lxp_mocheng/article/details/104795835
Recomendado
Clasificación