Arreglos en Python explicados!
Si te estás iniciando en la programación o estás aprendiendo sobre Python, este artículo es para ti, las matrices son una de las estructuras de datos más utilizadas. ¿Cómo representa Python las matrices? ¿Cómo podemos manipular matrices en Python para resolver diferentes problemas? Esto es lo que vamos a averiguar en este artículo.
¿Cómo almacenan información las computadoras?
Como sabe, la forma más primaria de información en una computadora se compone de bits de información. A continuación, se agrupan 8 bits de esta información para formar lo que llamamos un byte .
Debido a que las computadoras pueden almacenar grandes porciones de estos bytes, necesitan un nuevo mecanismo que les permita leer y escribir bytes rápidamente, aquí es donde entran en juego las direcciones de memoria , al igual que la dirección de su casa personal diferencia dónde vive de su vecino, el La computadora usa direcciones de memoria para diferenciar dónde viven diferentes datos e información.
También vale la pena mencionar que la computadora toma un tiempo de acceso O(1) para llegar a cualquier dirección de memoria, esto significa que acceder al byte #5489637 es lo mismo que acceder al byte #64.
¿Qué son las matrices?
Una práctica común en los lenguajes de programación es usar variables para referirse a una dirección en una memoria, por ejemplo, el identificador X puede referirse al byte #32.
En caso de que queramos almacenar múltiples direcciones de memoria, crear múltiples identificadores no es eficiente ni escalable. Preferiríamos más si tuviéramos un nombre para el grupo de identificadores y usáramos números para acceder a identificadores específicos. Tal representación es una matriz, en otras palabras, es una representación de un grupo de variables en una porción contigua de la memoria de la computadora.
Las cadenas en Python, por ejemplo, se almacenan de esta manera, digamos que declara una nueva variable con el texto 'ejemplo' que Python asignará:
2 bytes (memoria necesaria para almacenar un carácter Unicode) * 7 (número de caracteres en la palabra ejemplo) = 14 bytes de memoria contigua para almacenar esta variable.
Matrices referenciales
Python usa otro tipo de arreglos que son arreglos referenciales, para entenderlos, echemos un vistazo a este ejemplo, digamos que usted es dueño de un hotel y tiene 50 habitaciones, necesita una forma de almacenar el nombre de quién se hospeda en qué habitación para que una representación como la siguiente:
para hacer esto, Python debe respetar la condición de espacio de memoria contiguo para asignar. Pero, ¿cómo hace esto cuando los nombres tienen diferentes longitudes (diferentes longitudes significan diferentes requisitos de espacio)?
Una solución sería encontrar la longitud de la cadena más grande y asignar suficiente espacio de memoria para todos, pero esto no será eficiente en memoria ya que se desperdiciará algo de espacio y ¿qué pasa si aparece una nueva cadena que ahora es la cadena más grande?
Para resolver esto, Python crea una matriz de referencias contiguas a múltiples objetos, por lo que ahora, aunque el tamaño de cada objeto individual puede variar, la memoria utilizada para almacenar su dirección de memoria es la misma. De esta forma, Python garantiza un tiempo de acceso constante a los diferentes elementos del arreglo. Nos referimos a este tipo de matriz como matriz referencial.
Para ilustrar esto, eche un vistazo a esta imagen:
Las listas y tuplas en Python usan este tipo de matriz para almacenar datos.
Nota: Como las matrices referenciales apuntan a las referencias, tenga cuidado al cambiar los valores de referencia, ya que también puede modificar los valores en las Listas por error. Además, al crear copias, asegúrese de conocer la diferencia entre copia superficial y profunda .
Matrices compactas
Anteriormente hablamos sobre las cadenas y cómo las almacenamos en una matriz de memoria contigua, de hecho llamamos a esta matriz una matriz compacta.
Una ventaja de usar arreglos compactos sobre los referenciales es que no hay gastos adicionales por almacenar referencias de memoria, almacenamos directamente los datos primarios. Otra ventaja que vale la pena mencionar es que, en caso de usar una lista que es una matriz referencial, Python no tiene control sobre dónde se almacenan sus datos, aunque la lista mantiene referencias a dónde están los datos. Debido a cómo funciona el hardware, es más eficiente tener sus datos cerca uno del otro, podría usarse para el mismo cálculo.
A pesar de estas ventajas, para las Listas y las tuplas, Python utiliza arreglos referenciales, ya que son convenientes de usar. Sin embargo, si insiste en usar una matriz compacta, Python le proporciona un módulo llamado matriz que le permite hacer esto:
Aquí notó que pasamos i como primer argumento a array. Porque para crear una matriz compacta necesitamos especificar el tipo para la asignación de memoria adecuada. Para otros tipos de datos, consulte esta tabla:
Si desea obtener más información sobre el módulo de matriz, haga clic aquí .
Una desventaja del módulo de matriz es que no admite tipos de datos definidos por el usuario. Los arreglos compactos con tal estructura de datos se pueden definir usando el módulo ctypes .
Matrices dinámicas
Al crear una matriz compacta, especificamos el tamaño preciso de esa matriz para que la computadora sepa qué memoria asignar. Porque asigna el área de memoria vecina a otras matrices.
En la práctica, no siempre podemos saber el tamaño de nuestras matrices, pueden expandirse con el tiempo. Como remedio a este problema, Python proporciona una abstracción llamada Dynamic Array.
Esta abstracción utiliza una instancia de lista que mantiene una matriz subyacente que tiene una capacidad superior a la longitud de la lista real. Esta capacidad extra nos ayuda a añadir más y más datos a la lista.
Cuando finalmente agotamos la capacidad adicional, Dynamic Array solicita un nuevo arreglo más grande y copia todos los elementos en el nuevo arreglo y el sistema recupera el espacio del viejo arreglo.
Python List se basa en esta abstracción, pero Tuples y Strings son inmutables (no se pueden cambiar), por lo tanto, no se basan en esto.
También vale la pena mencionar que la matriz dinámica no solo se expande en tamaño sino que también puede reducirse si eliminamos elementos de la lista.
Listas y tuplas
Entonces, a partir del análisis que hicimos en la sección anterior, podemos dividir los métodos de listas y tuplas en dos tipos de métodos:
Métodos que no cambian: métodos que existen tanto en tuplas como en listas y no cambian su contenido. A continuación se muestra una tabla de estos métodos y su complejidad temporal:
Métodos mutantes: métodos que existen solo en listas, ya que cambian los datos subyacentes y la estructura de la lista. A continuación se muestra una tabla de estos métodos y su complejidad temporal:
No discutimos aquí lo que hace cada método (es intuitivo y fácil), pero puede obtener más información sobre las listas y tuplas de Python .
comida para llevar
- Las matrices referenciales almacenan referencias en su memoria de matriz y luego acceden a los valores reales a través de las referencias.
- Las matrices compactas almacenan los datos reales en una memoria contigua.
- Las matrices dinámicas son matrices que se expanden y reducen automáticamente según la cantidad de elementos que contienen.
- Las listas se basan en matrices referenciales y dinámicas.
- Las tuplas se basan en matrices referenciales.
- Las cadenas se basan en arreglos compactos.
LinkedIn:https://www.linkedin.com/in/mohamed-aziz-belaweid/
GitHub:https://github.com/azayz
Lee mis otras historias:
REALM: Recuperación Modelo de lenguaje aumentado Preentrenamiento Reconocimiento de emociones faciales, ¡Guía práctica!Suscríbete y recibe una notificación cada vez que publique algo:

![¿Qué es una lista vinculada, de todos modos? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































