/ / Actualizar el valor de la variable en una lista - Python - python

Actualizar el valor de la variable en una lista - Python - python

Desarrollando un proyecto encontré un error curioso en Python. Por ejemplo :

#Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:19:30) [MSC v.1500 32 bit (Intel)] on win32

variable = "Hello_1"
list = ["This is a variable -> ",variable]
print list #-> ["This is a variable -> " , "Hello_1"]

Ahora, modifico la variable a un nuevo valor. Entonces, cuando cambie el valor de la variable, veré el nuevo valor en la lista

variable = "Hello_2"
print list #-> ["This is a variable -> " , "Hello_1"]

Pero, ¿la salida es la misma que la primera vez? ¿Alguien sabe como resolverlo?

Respuestas

0 para la respuesta № 1

Ver en la imagen de la variable no tiene ningún enlace con la lista.

enter image description here

Str, int, float y tuple no son editables. lista y diccionario son editables. Así que si usas la lista o el diccionario que cambia en todas partes.

Vea este ejemplo cuando use la lista en lugar de la variable

variable = ["Hello_1"]
lis = ["This is a variable -> ",variable]
print lis #-> ["This is a variable -> " , "Hello_1"]
variable[0] = "Hello_2"
print lis #-> ["This is a variable -> " , "Hello_2"]

enter image description here

imprime

["Esta es una variable ->", ["Hello_2"]]


-1 para la respuesta № 2

Las cadenas de Python son valores puros y cuando se asignan,Se copian lógicamente. (Tal vez internamente se hace más inteligente usando alguna funcionalidad de copia en escritura, pero para el desarrollador de Python esto nunca se muestra).

Lo que querías es una referencia a una cadena. Esto no existe en Python.

Lo más cerca que puede llegar es usando una lista con un solo elemento. Dado que las listas se copian por referencia, pueden emular lo que usted esperaba:

variable = ["Hello_1"]
list = ["This is a variable -> ",variable]
print list #-> ["This is a variable -> " , ["Hello_1"]]
variable[0] = "Hello_2"  # assign to element of list
print list #-> ["This is a variable -> " , ["Hello_2"]]

Pero, por favor, ya que esto es difícil de entender.y lejos de ser Pythonic, publiqué esto solo para aumentar la comprensión de lo que está sucediendo en Python. No recomendaría el uso de esta funcionalidad, al menos no para los principiantes. Es mejor aceptar que las cadenas se copian (al menos lógicamente) al momento de la asignación y encuentra una manera de programar lo que necesitas usando esto.