Saltar al contenido

Puntero en Python | Por qué Python no admite puntero

octubre 15, 2021
pointer in python

En este tutorial, aprenderemos sobre el puntero en Python y veremos por qué Python no admite conceptos de puntero.

También entenderemos cómo podemos simular el puntero en Python. A continuación se muestra la introducción del puntero para aquellos que no lo tienen.

También entenderemos cómo podemos simular el puntero en Python. A continuación se muestra la introducción del puntero para aquellos que no tienen ninguno al respecto.

¿Qué es Pointer?

Pointer es una herramienta muy popular y útil para almacenar la dirección de la variable. Si alguien alguna vez ha trabajado con un lenguaje de bajo nivel como C. C ++, probablemente esté familiarizado con los punteros. Gestiona el código de manera muy eficiente. Puede ser un poco difícil para los principiantes, pero es uno de los conceptos importantes del programa. Sin embargo, puede provocar varios errores de gestión de la memoria. Por lo tanto, la definición de punteros:

«Los punteros son las variables que contienen la dirección de memoria de otra variable. Las variables de puntero están representadas por un asterisco

. «

Veamos el siguiente ejemplo del puntero en lenguaje de programación C.

int main () {int * po, o; 0 = 10; printf («Dirección de c:% p n», & c); printf («Valor de c:% d n n», c); o = & 0; printf («Dirección del puntero pc:% p n», o); printf («Contenido del puntero pc:% d n n», * o); 0 = 11; printf («Dirección del puntero pc:% p n», p0); printf («Contenido del puntero pc:% d n n», * p0); * po = 2; printf («Dirección de c:% p n», & o); printf («Valor de c:% d n n», o); return 0; }

Address of o: 2686784
Value of o: 22

Address of pointer po: 2686784
Content of pointer po: 22

Address of pointer po: 2686784
Content of pointer po: 11

Address of o: 2686784
Value of o: 2

Producción:

Además de ser útiles, los punteros no se utilizan en Python. En este tema, discutiremos el modelo de objetos de Python y aprenderemos por qué los punteros en Python no existen. También aprenderemos diferentes formas de simular punteros en Python. Primero, analicemos por qué Python no es compatible con Pointers.

¿Por qué Python no admite punteros? La razón exacta por la que no se admite el puntero no está clara. ¿Podría el puntero en Python existir de forma nativa? El concepto principal de Python es su simplicidad, pero el puntero violó el Zen de Python.

Los punteros son principalmente cambios implícitos en lugar de explícitos. También son complejos, especialmente para principiantes.

Los punteros tienden a crear complejidad en el código, donde Python se centra principalmente en la usabilidad en lugar de la velocidad. Como resultado, Python no es compatible con pointer. Sin embargo, Python ofrece algunos beneficios de usar el puntero.

  • Antes de entender el puntero en Python, necesitamos tener la idea básica de los siguientes puntos.
  • Objetos inmutables frente a objetos mutables

Variables / nombres de Python

Objetos en Python

  • En Python, todo es un objeto, incluso una clase, funciones, variables, etc. Cada objeto contiene al menos tres datos.
  • Recuento de referencias
  • Escribe

Valor

Discutamos uno por uno. Recuento de referencias –

Se utiliza para la gestión de la memoria. Para obtener más información sobre la administración de memoria de Python, lea Administración de memoria en Python. Escribe – los CPython

La capa se utiliza como tipo para garantizar la seguridad del tipo durante el tiempo de ejecución. Finalmente, hay un valor, que es el valor real asociado con el objeto.

Sin embargo, si profundizamos en este objeto, encontraremos que no todos los objetos son iguales. La importante distinción entre los tipos de objeto es inmutable y mutable. En primer lugar, debemos comprender la diferencia entre los tipos de objeto porque explora el puntero en Python.

Objetos inmutables frente a objetos mutables

Los objetos inmutables no se pueden modificar, donde los objetos mutables se pueden modificar. Veamos la siguiente tabla de tipos comunes y si son mutables o no. Objetos
Escribe En t
Inmutable Flotador
Inmutable Bool
Inmutable Lista
Mudable Colocar
Mudable Complejo
Mudable Tupla
Inmutable Frozenset
Inmutable Dictar

Mudable Podemos verificar el tipo de los objetos anteriores usando el identificación()

método. Este método devuelve la dirección de memoria del objeto.

x = 5 id (x)

Producción:

x- = 1 id (x)

Producción: Como podemos ver, modificamos el código anterior y obtenemos nuevos objetos como respuesta. Tomemos otro ejemplo destr

s = «java» print (id (s)) s + = «Tpoint» print (s) id (s)

2315970974512
JavaTpoint
1977728175088

Producción:

= T print (id (s))

Traceback (most recent call last):
  File "C:/Users/DEVANSH SHARMA/PycharmProjects/MyPythonProject/python1.py", line 34, in 
    s[0] = T
NameError: name 'T' is not defined

Producción: El código anterior devuelve un error, significa que la cadena no admite la mutación. Entonces str

son los objetos inmutables.

imprimir (id (mi_lista)) mi_lista.append (4) imprimir (mi_lista) imprimir (id (mi_lista))

2571132658944
[3, 4, 8, 4]
2571132658944

Producción: Como podemos ver en el código anterior, el mi lista tiene la identificación originalmente, y hemos agregado 5 a la lista; mi lista tiene la misma identificación porque la lista admite el

mutabilidad.

Comprender las variables de Python

La forma de definir variables en Python es muy diferente a la de C o C ++. La variable de Python no define el tipo de datos. De hecho, Python tiene nombres, no variables.

Por lo tanto, debemos comprender la diferencia entre las variables y los nombres, y esto es especialmente cierto cuando navegamos por el complicado tema de los punteros en Python.

Entendamos cómo funciona la variable en C y cómo funciona el nombre en Python.

Variables en C

  • int x = 286;
  • Asigne suficiente memoria para un número entero.
  • Asignamos el valor 286 a esa ubicación de memoria.

La x representa ese valor.

Si representamos la vista de la memoria -

Puntero en Python

Como podemos ver, la x tiene una ubicación de memoria para el valor 286. Ahora, asignaremos el nuevo valor a x.

x = 250

Este nuevo valor sobrescribe el valor anterior. Significa que la variable x es mutable.

La ubicación del valor de x es la misma, pero el valor cambió. Es un punto significativo que indica que x es la ubicación de la memoria, no solo su nombre.

int y = x;

La variable y crea un nuevo cuadro llamado y copia el valor de x en el cuadro.

Puntero en Python

Nombres en Python

x = 289

  1. El código anterior se desglosa durante la ejecución.
  2. Crear un PyObject
  3. Establezca el código de tipo en entero para PyObject
  4. Establezca el valor en 289 para PyObject
  5. Crea un nombre llamado x
  6. Apunta x al nuevo PyObject

Aumentar el recuento de ref. Del PyObject en 1.

Se verá como a continuación.

Puntero en Python

Podemos entender el funcionamiento interno de una variable en Python. La variable x apunta a la referencia del objeto y no tiene el espacio de memoria como antes. También muestra que x = 289 está vinculando el nombre x a una referencia.

y = x En Python, la variable y no creará el nuevo objeto; es solo un nuevo nombre que apunta al mismo objeto. El objeto refcount

y es x

Producción:

y + = 1 y es x

Eso significa que, en Python, no asignamos variables. En su lugar, vinculamos nombres para hacer referencia.

Simulando punteros en Python

  • Como hemos comentado, Python no admite puntero, pero podemos obtener los beneficios de usar un puntero. Python proporciona formas alternativas de usar el puntero en Python. Estas dos formas se dan a continuación.
  • Usar tipos mutables como punteros

Usar objetos Python personalizados

Entendamos los puntos dados.

Usar tipos mutables como puntero

En la sección anterior, hemos definido los objetos de tipo mutable; podemos tratarlos como si fueran punteros para simular su comportamiento. Entendamos el siguiente ejemplo.

void add_one (int * a) {* a + = 1; }

int main (vacío) {int y = 233; printf («y =% d n», y); add_one (& y); printf («y =% d n», y); return 0; }

Producción:

z = (2337,) agregar_uno (z)

Traceback (most recent call last):
  File "", line 1, in 
  File "", line 2, in add_one
TypeError: 'tuple' object does not support item assignment

Producción:

Usamos la tupla en el código anterior, un objeto inmutable, por lo que devolvió el error. También podemos usar el diccionario para simular el puntero en Python.

Entendamos el siguiente ejemplo donde contaremos cada operación que ocurra en el programa. Podemos usar dict para lograr esto.

Producción:

Explicación – En el ejemplo anterior, hemos utilizado el contar diccionario, que realizó un seguimiento del número de llamadas a funciones. Cuando el foo ()

se llama a la función, el contador aumenta 2 porque dict es mutable.

Usar objetos de Python

En el ejemplo anterior, usamos dict para emular el puntero en Python, pero a veces resulta difícil recordar todos los nombres de claves usados. Podemos usar la clase personalizada de Python en lugar del diccionario. Entendamos el siguiente ejemplo.

class Pointer (objeto): def __init __ (self): self._metrics = {«funCalls»: 0, «catPictures»: 0,}

Hemos usado @propiedad

pt = Puntero () pt.funCalls () pt.catPicture_served

+ = 1

Hemos definido dos nuevos métodos: increment () y cat_pics (). Hemos modificado los valores usando estas funciones en el dictado de matrices. Aquí podemos …

close