Fundamentos de Programación y Python

1

Fundamentos de Programación con Python para Principiantes

2

Instalación y Uso Básico de Python en Windows y Mac

3

Semántica y Sintaxis en Programación Python

4

Práctica: Te doy la bienvenida a los ejercicios interactivos

5

Manejo de Cadenas y Operaciones Básicas en Python

6

Tipos de Datos en Python: Enteros, Flotantes y Booleanos

7

Dominio de la función `print` en Python: usos y formatos avanzados

8

Operaciones matemáticas avanzadas en Python: módulo, potencia y más

9

Entrada de información y manejo de tipos de datos en Python

Colección y Procesamiento de Datos en Python

10

Manipulación de Listas en Python: Creación, Indexación y Métodos Básicos

11

Copiar listas en Python sin compartir memoria con slicing

12

Manejo de Matrices y Tuplas en Python

13

Matrices en Juegos y Imágenes con Python

14

Diccionarios en Python: Uso y Manipulación de Datos

Control de Flujo en Python

15

Estructuras Condicionales en Programación: Uso de If, Else y Elif

16

Iteración y control de flujo con bucles en Python

17

Iteradores y Generadores en Python: Uso Eficiente de Memoria

18

Listas por comprensión en Python: creación y optimización de listas

Funciones y Manejo de Excepciones en Python

19

Funciones y Parámetros en Python: Crea una Calculadora Básica

20

Funciones Lambda en Python: Uso y Aplicaciones Prácticas

21

Recursividad en Python: Factoriales y Serie de Fibonacci

22

Manejo de Excepciones y Errores en Python

Programación Orientada a Objetos en Python

23

Programación Orientada a Objetos en Python: Clases y Métodos Básicos

24

Gestión de Biblioteca con Programación Orientada a Objetos

25

Herencia y Polimorfismo en Programación Orientada a Objetos

26

Programación Orientada a Objetos: Implementación de Clases y Herencia

27

Polimorfismo en Programación Orientada a Objetos

28

Herencia y Uso de la Función super() en Python

29

Programación Orientada a Objetos: Atributos, Métodos y `super()` en Python

Lectura y escritura de archivos

30

Manipulación de Archivos TXT y CSV en Python

31

Manipulación de archivos CSV con Python: lectura y escritura

32

Manejo de Archivos JSON en Python para Aplicaciones Web y APIs

Biblioteca estándar de Python

33

Uso Eficiente de la Biblioteca Estándar de Python

34

Uso de las librerías OS, Math y Random en Python

35

Análisis de Datos de Ventas con Python y Statistics

36

Desarrollo del juego Batalla Naval en Python

Conceptos avanzados de Python

37

Programación Avanzada en Python: POO, Excepciones y Proyectos

38

Escritura de Código Pytónico y Buenas Prácticas en Python

39

Comentarios y Docstrings: Buenas Prácticas en Programación

40

Tiempo de vida y alcance de variables en Python

41

Anotaciones de Tipo en Python para Código Más Legible

42

Validación de Tipos y Manejo de Excepciones en Python

43

Estructuras de Datos Avanzadas en Python: Collection y Enumeraciones

Decoradores

44

Decoradores en Python: Extiende Funcionalidades de Funciones

45

Uso de Decoradores Anidados y con Parámetros en Python

46

Decoradores en Programación Orientada a Objetos en Python

Métodos y estructura de clases en Python

47

Uso de Métodos Mágicos en Python

48

Sobrecarga de Operadores en Python: Personaliza Comportamiento de Clases

49

Ejecutar scripts Python con `if __name__ == '__main__'`

50

Metaprogramación en Python: Métodos `__new__` y `__init__`

51

Uso de *args y **kwargs en funciones de Python

52

Métodos y Atributos Privados y Protegidos en Python

53

Uso de Property en Python: Getter, Setter y Eliminación de Atributos

54

Métodos estáticos y de clase en Python

Programación concurrente y asíncrona

55

Concurrencia y Paralelismo en Python: Técnicas y Librerías Básicas

56

Concurrencia y Paralelismo en Python: `threading` y `multiprocessing`

57

Asincronismo en Python con AsyncIO y Corrutinas

58

Sincronía y Concurrencia en Python: Teoría y Práctica

Creación de módulos y paquetes

59

Módulos y Paquetes en Python: Reutilización y Organización de Código

60

Uso de Paquetes y Subpaquetes en Python con Visual Studio Code

61

Publicación de Paquetes Python en PyPI

Proyecto final

62

Sistema de Gestión de Reservas en Python Avanzado

63

Sistema de Gestión de Reservas en Python Avanzado

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Python

Curso de Python

Carli Code

Carli Code

Copiar listas en Python sin compartir memoria con slicing

11/63
Recursos

Cuando asignamos una lista a una nueva variable, por ejemplo, B = A, no estamos creando una copia independiente. Ambas variables apuntan al mismo espacio de memoria. Así, cualquier cambio en A se reflejará en B.

¿Cómo evitar que dos listas apunten al mismo espacio de memoria?

Para evitar que dos variables apunten al mismo espacio de memoria, debemos crear una copia superficial de la lista original usando slicing. Por ejemplo:

  • Crear una lista A con números del 1 al 5.
  • Asignar B = A y luego imprimir ambas listas muestra que ambas son idénticas.
  • Eliminar un elemento de A también lo elimina de B.

¿Cómo usar slicing para crear una copia de una lista?

Podemos utilizar slicing para copiar una lista sin que ambas variables apunten al mismo espacio de memoria. Por ejemplo:

A = [1, 2, 3, 4, 5]
C = A[:]

Luego, verificamos los IDs de memoria:

print(id(A))
print(id(C))

Ambos IDs serán diferentes, lo que indica que C es una copia independiente de A.

¿Por qué es importante entender la asignación de memoria en listas?

En Python, a diferencia de otros lenguajes, podemos almacenar diferentes tipos de datos en una colección. Entender cómo funciona la memoria es crucial para evitar errores en el código, especialmente en aplicaciones del mundo laboral.

Aportes 43

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Otra forma de hacer una copia es mediante el método .copy() implementado en las listas:

lista1 = [1,2,3,4,5]
lista2 = lista1.copy()

lista2.append( 6 )

print( lista1 )
print( lista2 )
```js # Lista de ejemplo lista = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # Ejemplos de slicing sublista1 = lista[2:5] sublista2 = lista[:4] sublista3 = lista[5:] sublista4 = lista[::2] sublista5 = lista[1:7:2] # Slicing con índices negativos sublista6 = lista[-5:] sublista7 = lista[:-5] sublista8 = lista[-8:-2:2] # Salida de resultados print("Lista original:", lista) print("Sublista del índice 2 al 4:", sublista1) print("Sublista desde el inicio al índice 3:", sublista2) print("Sublista desde el índice 5 al final:", sublista3) print("Sublista con paso de 2:", sublista4) print("Sublista del índice 1 al 6 con paso de 2:", sublista5) print("Últimos 5 elementos:", sublista6) print("Todos menos los últimos 5:", sublista7) print("Sublista del índice -8 al -3 con paso de 2:", sublista8) ```xplicación del Código 1. **Lista de Ejemplo**: Se define una lista de ejemplo con 10 elementos. 2. **Slicing Básico**: Se crean sublistas utilizando diferentes combinaciones de índices de inicio, fin y paso. 3. **Slicing con Índices Negativos**: Se muestran ejemplos de cómo utilizar índices negativos para acceder a elementos desde el final de la lista. 4. **Salida de Resultados**: Se imprimen las sublistas resultantes para visualizar los efectos de cada operación de slicing. Este script te proporciona una comprensión completa de cómo utilizar el método `slice` para manipular listas en Python.
![](https://static.platzi.com/media/user_upload/Python%20El%20M%C3%A9todo%20slice%28%29%20en%20Python-a351c180-59a0-4bb6-804e-38f1afd24db5.jpg)
El slicing no crea copias de los elementos de la lista original. En su lugar, crea una vista (en el caso de listas de Python 3.x) o una nueva lista con referencias a los elementos de la lista original. Esto es eficiente en términos de memoria y tiempo, especialmente cuando se trabaja con listas grandes.
Notas: -Si queremos tener dos listas con los mismos elementos, digamos que tenemos la lista a y queremos pasar sus datos a b, si se hace "b = a" se harán las dos listas idénticas pero tendrán en mismo id, entonces si se modifica algo en a repercutirá en b, para evitar esto hay que hacer "b = a\[:]"
1. **Sintaxis básica:** * La sintaxis general para crear un slice en Python es la siguiente:secuencia\[inicio:fin:paso] * **inicio**: Índice donde comienza el slice (incluido). * **fin**: Índice donde termina el slice (excluido). * **paso**: Tamaño del incremento entre elementos del slice (opcional). 2. **Ejemplos de uso**:Supongamos que tenemos una lista de números:numeros = \[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] * **Copia completa de la lista**:resultado = numeros\[:] \# Resultado: \[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] * **Obtener los primeros tres elementos**:primeros\_tres = numeros\[:3] \# Resultado: \[0, 1, 2] * **Obtener todos los elementos desde el tercer elemento en adelante**:desde\_tercero = numeros\[2:] \# Resultado: \[2, 3, 4, 5, 6, 7, 8, 9] * **Obtener todos los elementos con un paso de 2**:con\_paso\_dos = numeros\[::2] \# Resultado: \[0, 2, 4, 6, 8] * **Índices negativos**: Podemos usar índices negativos para referirnos a elementos desde el final de la secuencia:ultimos\_tres = numeros\[-3:] \# Resultado: \[7, 8, 9] primeros\_salvo\_tres = numeros\[:-3] \# Resultado: \[0, 1, 2, 3, 4, 5, 6] * **Modificar valores con Slices**: También podemos usar Slices para modificar valores en una secuencia:frutas = \["manzana", "banana", "cereza", "dátil", "uva"] frutas\[1:3] = \["pera", "naranja"] \# Reemplaza "banana" y "cereza" por "pera" y "naranja"
El método `slice()` en programación, especialmente en lenguajes como Python o JavaScript, sirve para cortar o extraer una parte de una secuencia, como una lista o una cadena, sin modificar el original. En resumen, `slice()` te ayuda a obtener solo una parte de los datos, fácil y rápido.
Si hacemos un .append a la variable b, también cambia la a. `a = [1, 2, 3, 4, 5] ` `b = a ` `print(a) # [1, 2, 3, 4, 5]` `print(b) # [1, 2, 3, 4, 5]` `a.append(6)` `print(a) # [1, 2, 3, 4, 5, 6]` `print(b) # [1, 2, 3, 4, 5, 6]` `b.append(10)` `print(a) # [1, 2, 3, 4, 5, 6, 10] ` `print(b) # [1, 2, 3, 4, 5, 6, 10]`
El método slice en Python es como usar tijeras para cortar una lista. Imagina que tienes una fila de juguetes y solo quieres algunos de ellos. Con slice, puedes decirle a Python que te dé solo la parte de la lista que quieres, como si estuvieras cortando. Por ejemplo, si tienes 5 juguetes y solo quieres el segundo y el tercero, puedes usar slice para obtener solo esos. Así, no tocas el resto de la fila, solo obtienes lo que necesitas.
Yo soy de ventas y quise checar esto para aprender algo nuevo, pero no especifican bien bien, por ejemplo no entiendo a que te refieres con id(a)... así que no entendí.
![](https://static.platzi.com/media/user_upload/image-e140593d-7950-4e85-b3f8-5b22f17668e0.jpg)
"En algunos lenguajes de programación, existe el concepto de paso por valor y paso por referencia. El paso por referencia consiste en apuntar, a través de una variable, hacia un valor almacenado en memoria que es compartido con otra variable previamente asignada. Por lo tanto, los cambios que sufra el valor en una variable también se reflejarán en la otra, ya que ambas apuntan al mismo espacio en memoria. Sin embargo, en Python, el comportamiento es un poco diferente: aunque no implementa estrictamente el paso por valor o por referencia, los objetos mutables como listas o diccionarios pueden ser modificados a través de una referencia, lo que afecta a todas las referencias que apuntan a ese objeto, mientras que los objetos inmutables no se ven afectados de la misma manera."
Un excelente repaso gracias
Con respecto al método Slice y la técnica slicing (mencionada en esta clase y en la clase de listas), hay una oportunidad de mejora. Estamos nombrando método slice, para hacer referencia a la técnica Slicing. Sin embargo, ni en esta clase, ni en la clase anterior de listas, se mencionó el método Slice "slice()"
Cuando asignamos una variable con una lista a otra variable, por ejemplo a=b, no solo le asignamos los valores, si no tambien el espacio de memoria. Para evitar esto se usa el método slice
El espacio donde se guardan los objetos de python como listas, variables, etc, se llama heap, mientras que el stack en donde se guardan los objetos mas pequeños y las referencias. La razon porque python usa heap para objetos grandes y las referencias en el stack, es para evitar redundar objetos grandes en memoria y ahorrar espacio
Para que `a` y `b` sean diferentes, debes usar el método de slicing. Cuando haces `b = a`, ambas variables apuntan al mismo espacio en memoria. Para crear una copia independiente, usa `b = a[:]`, que copia todos los elementos de `a` en `b`. Ahora, cualquier modificación en `a` no afectará a `b`. Por ejemplo: ```python a = [1, 2, 3, 4, 5] b = a[:] # Copia independiente a.remove(1) # Modificar solo a print(a) # [2, 3, 4, 5] print(b) # [1, 2, 3, 4, 5] - sigue igual ``` Esto garantiza que `a` y `b` tendrán contenidos distintos.
Creo que la analogia mas parecida que logro encontrar es por ejemplo lo que pasa como cuando igualamos el valor de una celda en excel.
```js a = [1,2,3] b = a.copy() print(a) print(b) a.append(4) print(a) print(b) ```
lo hice utilizando copy(), me resulto mas facil lista1 = \[1,2,3,4,5]lista2 = lista1.copy()lista2.append(6)print(lista1)print(lista2)print(id(lista1))print(id(lista2))```js lista1 = [1,2,3,4,5] lista2 = lista1.copy() lista2.append(6) print(lista1) print(lista2) print(id(lista1)) print(id(lista2)) ```
Las diferencias entre tuplas y listas en Python son las siguientes: 1. **Mutabilidad**: Las listas son mutables, lo que significa que puedes modificar, agregar o eliminar elementos después de su creación. Las tuplas son inmutables; una vez creadas, no puedes cambiar su contenido. 2. **Sintaxis**: Las listas se definen con corchetes `[]`, mientras que las tuplas se definen con paréntesis `()`. 3. **Uso**: Las listas son ideales para colecciones de elementos que pueden cambiar, mientras que las tuplas son más adecuadas para datos que no deberían cambiar, como coordenadas o datos fijos. 4. **Rendimiento**: Las tuplas suelen ser más ligeras y rápidas que las listas debido a su inmutabilidad.
![](https://static.platzi.com/media/user_upload/image-a5b9aebb-6df4-46c0-92ed-317f11495002.jpg)
```python print("--------------------------------------------------------------------------------------------------") print("Cambio de clase - Metodo SLICE") print("--------------------------------------------------------------------------------------------------") #Metodo SLICE listA = [34, 56, 78, 23, 12, 90, 44, 67, 89, 21, 11, 35, 50, 72, 60] listB = listA print(listA) print(listB) del listA[0] #Se mando a borrar en la "listA", pero se borro en las dos por que mabas ocupa y comparten el mismo lugar en memoria print(listA) print(listB) print(id(listA)) print(id(listB)) #Como vemos ambas estan compartiendo el mismo espacio en memoria, por eso su numero es el mismo #Para que esto no suceda es que se utiliza el METODO "SLICE" listC = listA[:] print(id(listA)) print(id(listB)) print(id(listC)) #Si nos damos cuenta el espacio en memoria ya cambio listA.append(89) print(listA) print(listB) print(listC) #podemos ver que aqui no se agrego la modificacion print(id(listA)) print(id(listB)) print(id(listC)) # aqui vemos wue mantiene el espacio de memoria tambien diferente ```print("--------------------------------------------------------------------------------------------------")print("Cambio de clase - Metodo SLICE")print("--------------------------------------------------------------------------------------------------")#Metodo SLICElistA = \[34, 56, 78, 23, 12, 90, 44, 67, 89, 21, 11, 35, 50, 72, 60]listB = listAprint(listA)print(listB)del listA\[0] #Se mando a borrar en la "listA", pero se borro en las dos por que mabas ocupa y comparten el mismo lugar en memoriaprint(listA)print(listB)print(id(listA))print(id(listB)) #Como vemos ambas estan compartiendo el mismo espacio en memoria, por eso su numero es el mismo#Para que esto no suceda es que se utiliza el METODO "SLICE"listC = listA\[:]print(id(listA))print(id(listB)) print(id(listC)) #Si nos damos cuenta el espacio en memoria ya cambio listA.append(89)print(listA)print(listB) print(listC) #podemos ver que aqui no se agrego la modificacion print(id(listA))print(id(listB)) print(id(listC)) # aqui vemos wue mantiene el espacio de memoria tambien diferente
![](https://static.platzi.com/media/user_upload/image-a71a28ae-bcbb-4e75-bdd2-3fc9e1760560.jpg)
Estoy obsesionado con este curso. Gracias Platzi!
En java esto pasa con todos los objetos (Instancia de una clase).
No se si esto es relevante aquí pero en resumen habla de copiar por referencia vs copiar por valor. Vengo de JS y en su momento me costo entenderlo pero aquí esta explicado perfectamente
Mas o menos así lo entendí# Lista originalnumbers = \[1, 2, 3, 111, 87, 4, 5] \# Crear una copia superficial de la listanumbers\_copy = numbers\[:] \# Modificar la lista originalnumbers\[0] = 99 \# Imprimir ambas listas para ver la diferenciaprint("Lista original:", numbers)print("Copia de la lista:", numbers\_copy) ```js # Lista original numbers = [1, 2, 3, 111, 87, 4, 5] # Crear una copia superficial de la lista numbers_copy = numbers[:] # Modificar la lista original numbers[0] = 99 # Imprimir ambas listas para ver la diferencia print("Lista original:", numbers) print("Copia de la lista:", numbers_copy) ```
La expresión slicing hace referencia a la **operación por medio de la cual se extraen elementos de una secuencia, tal como una lista o una cadena de caracteres**.
Así guardo mis apuntes para poder comprender mejor el proceso. Por si le sirve a alguien, lo dejo por acá :) ```python # Métido Slice # Cuando asignamos una lista a una nueva variable, por ejemplo, B = A, no estamos creando una copia independiente. Ambas variables apuntan al mismo espacio de memoria. Así, cualquier cambio en A se reflejará en B. a = [1,2,3,4,5] b = a print ('Lista A:', a) print ('Lista B:', b) del a [0] # Al eliminar se eliminará en ambas listas ya que tienen el mismo id en memoria print ('Lista A:', a) print ('Lista B:', b) # id me permite conocer cual es el codigo de cada varable dentro de la memoria print (id(a)) print (id(b)) c = a [:] # Slice!! Añadimos '[:]', '[:X]','[X:]' o '[X:X]' (dependiendo de los elementos que queramos traer de la lista inicial) y se genera una nueva lista con un id diferente print (id(a)) print (id(b)) print (id(c)) # Verás que tiene un id distinto # Si ahora eliminamos un elemento de la lista, no realizará cambios en C ya que está tiene un id diferente del a [-1] print ('Lista A:', a) print ('Lista B:', b) print ('Lista C:', c) # Sucede igual si añadimos un elemento a la lista a.append('Elemento Adicional') print ('Lista A:', a) print ('Lista B:', b) print ('Lista C:', c) ```
El método slice me permite trabajar en la misma variable y poderla gardar en otra con una "identificación" diferente.
```js #slice para copiar sin dirigirte al mismo espacio de memoria print (">>>>>>>>>>>>>>> slice") a = [1,2,3,4,5] b = a print (a) print (b) print (id(a)) print (id(b)) #aquí vemos que el slice id es el mismo] c = a[:] print (id(a)) print (id(b)) print (id(c)) # aquí se genera una clase diferente dentro de una colección a.append(6)# por que el append agrea un 6 a "a" y "b" perp a "c" ya no le tocó print ((a)) print ((b)) print ((c)) ```mi codigo comentado ```js ```
O método `slice()` em JavaScript é utilizado para copiar uma parte de um array ou string, retornando um novo array ou string sem modificar o original. Ele aceita dois parâmetros: o índice inicial (inclusivo) e o índice final (exclusivo). Se apenas o índice inicial for fornecido, o método copiará desde esse ponto até o final do array ou string. Aqui está um exemplo de uso com um array: ```javascript let array = \[1, 2, 3, 4, 5]; let novoArray = array.slice(1, 4); console.log(novoArray); // \[2, 3, 4] console.log(array); // \[1, 2, 3, 4, 5] (o array original não é modificado) ``` E com uma string: ```javascript let string = "Olá, mundo!"; let novaString = string.slice(4, 9); console.log(novaString); // " mundo" console.log(string); // "Olá, mundo!" (a string original não é modificada) ``` \### Parâmetros: 1\. \*\*Índice Inicial:\*\* Define o ponto de início da fatia. Se for negativo, indica a posição a partir do final do array/string. 2\. \*\*Índice Final:\*\* Define o ponto de término da fatia. Se omitido, a fatia vai até o final do array/string. Se negativo, indica a posição a partir do final, mas não inclui o valor no resultado. \### Observações: \- Se o `índice inicial` for maior ou igual ao comprimento do array/string, o método retorna um array/string vazio. \- Se o `índice final` for menor ou igual ao `índice inicial`, o método também retorna um array/string vazio. Este método é muito útil quando você deseja trabalhar com cópias de partes de arrays ou strings sem alterar o original.
![](https://static.platzi.com/media/user_upload/image-0418d120-de1f-4b76-89e8-7e77c9308352.jpg)
<https://github.com/iecgerman/10002-python/blob/master/clase11.py>
pero pq el video se llama metodo slice , si nunca lo uso a.slice(start,end,step)
print("--------------------------------------------------------------------------------------------------")print("Cambio de clase - Metodo SLICE")print("--------------------------------------------------------------------------------------------------")#Metodo SLICElistA = \[34, 56, 78, 23, 12, 90, 44, 67, 89, 21, 11, 35, 50, 72, 60]listB = listAprint(listA)print(listB)del listA\[0] #Se mando a borrar en la "listA", pero se borro en las dos por que mabas ocupa y comparten el mismo lugar en memoriaprint(listA)print(listB)print(id(listA))print(id(listB)) #Como vemos ambas estan compartiendo el mismo espacio en memoria, por eso su numero es el mismo#Para que esto no suceda es que se utiliza el METODO "SLICE"listC = listA\[:]print(id(listA))print(id(listB)) print(id(listC)) #Si nos damos cuenta el espacio en memoria ya cambio listA.append(89)print(listA)print(listB) print(listC) #podemos ver que aqui no se agrego la modificacion print(id(listA))print(id(listB)) print(id(listC)) # aqui vemos wue mantiene el espacio de memoria tambien diferente```js print("--------------------------------------------------------------------------------------------------") print("Cambio de clase - Metodo SLICE") print("--------------------------------------------------------------------------------------------------") #Metodo SLICE listA = [34, 56, 78, 23, 12, 90, 44, 67, 89, 21, 11, 35, 50, 72, 60] listB = listA print(listA) print(listB) del listA[0] #Se mando a borrar en la "listA", pero se borro en las dos por que mabas ocupa y comparten el mismo lugar en memoria print(listA) print(listB) print(id(listA)) print(id(listB)) #Como vemos ambas estan compartiendo el mismo espacio en memoria, por eso su numero es el mismo #Para que esto no suceda es que se utiliza el METODO "SLICE" listC = listA[:] print(id(listA)) print(id(listB)) print(id(listC)) #Si nos damos cuenta el espacio en memoria ya cambio listA.append(89) print(listA) print(listB) print(listC) #podemos ver que aqui no se agrego la modificacion print(id(listA)) print(id(listB)) print(id(listC)) # aqui vemos wue mantiene el espacio de memoria tambien diferente ```
```python list_1 = [1,2,3,[4,5]] list_2 = list_1[:] # Se crea la copia list_2[2] = "Hello" # Esto solo cambia en list_2, todo bien list_2[3][0] = "World" # Pero esto cambia en ambas listas de nuevo print(list_1) print(list_2) ```La forma `[:]` y el método `copy()` de las listas en python crean un shallow copy osea un copia superficial. Podriamos cambiar todos los elementos superficiales de la copia sin alterar los elementos de la lista original pero si intentamos cambiar elementos de listas internas, estos cambian en ambos lados.
```python # Cuando creamos una variable que este apuntando a una ya creada, la informacion de esta segunda variable sera la misma de la primera, ejemplo: inf = [24,"Dia",33,"Noche",77,"Tarde"] inf2 = inf print(inf) print(inf2) # Si queremos que las modificaciones de la variable 1, no afecten a la variable 2, debemos agregar a la variable nueva un Metodo Slice "[:]" (Aqui le estamos ordenando a la variable que copie el mismo contenido de la variable 1, pero que la guarde en otro lugar independiente) ejemplo: inf = [24,"Dia",33,"Noche",77,"Tarde"] inf2 = inf inf3 = inf[:] inf.append("Mañana") print(inf) print(inf2) print(inf3) # En este ejemplo agregamos algo adicional en la lista 1 y en la 3, no cambio su contenido. # Para revisar en donde esta almacenada la iformacion de cada variable podemos imprimir en metodo "id". ejemplo inf = [24,"Dia",33,"Noche",77,"Tarde"] inf2 = inf inf3 = inf[:] print(id(inf)) print(id(inf2)) print(id(inf3)) ```
No se si es idea mía pero en este video sentí como si se hubieran obviado algunas explicaciones. Incluso en el programa que realiza aparece como el 8\_2.
Método slice **Sintaxis básica:** La sintaxis general para crear un slice en Python es la siguiente: ```js secuencia[inicio:fin:paso] ```**- inicio**: Índice donde comienza el slice (incluido). **- fin**: Índice donde termina el slice (excluido). **- paso**: Tamaño del incremento entre elementos del slice (opcional). **Ejemplos de uso**: Supongamos que tenemos una lista de números: ```js numeros = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] ```**Copia completa de la lista**: ```js resultado = numeros[:] # Resultado: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] ``` **Obtener los primeros tres elementos**: ```js primeros_tres = numeros[:3] # Resultado: [0, 1, 2] ```**Obtener todos los elementos desde el tercer elemento en adelante**: ```js desde_tercero = numeros[2:] # Resultado: [2, 3, 4, 5, 6, 7, 8, 9] ```
Pensaba que esto solo pasaba con los diccionarios