Listas en Python

¿Es la lista en python homogénea o heterogénea?

 >>> def a(): pass >>> lst=[1,'one',{1:'one'},a,[1,1],(1,),True,set((1,))] >>> for each in lst: ... print type(each), str(each) ...  1  one  {1: 'one'}    [1, 1]  (1,)  True  set([1]) 

¿Alguna pregunta?

La Lista en Python es heterogénea: la misma lista puede aceptar objetos de varios tipos diferentes.

Aquí hay un fragmento que le da una lista homogénea en Python. Sin embargo, no tengo idea de cómo funcionaría esa pieza de código.

Las listas en Python pueden ser heterogéneas, pero por la convención general es preferible que solo contengan elementos homogéneos . Las tuplas de Python son la estructura de datos natural para secuencias heterogéneas .

Por supuesto, puede argumentar que tanto las tuplas como las listas son solo secuencias homogéneas de objetos de Python, pero eso es una simplificación engañosa y no agrega ningún valor.

Dado que las tuplas son inmutables y las listas son mutables , también se podría argumentar que la mutabilidad es la verdadera distinción entre ellas. Sin embargo, no es así como estaban destinados. Más sobre esto se puede encontrar en esta pregunta .

Por favor intente un simple

 a=[1, "a"] 

y ver si arroja un error antes de hacer una pregunta.

Por cierto, no lo hace.

Un argumento más para la homogeneidad de las listas: el PEP 484 y el nuevo módulo de typing . Los elementos de la tuple se pueden escribir individualmente con tuple :

Tuple , que se usa al enumerar los tipos de elementos, por ejemplo Tuple[int, int, str] . La tupla vacía se puede escribir como Tuple[()] . Las tuplas homogéneas de longitud arbitraria se pueden express utilizando un tipo y puntos suspensivos, por ejemplo Tuple[int, ...] . (Los … aquí son parte de la syntax, una elipsis literal.) [Referencia]

 >>> import typing >>> typing.Tuple[str, int, float] typing.Tuple[str, int, float] 

Sin embargo, una list , a través de la typing.List list solo acepta un único parámetro de tipo:

List , utilizada como List[element_type]

 >>> typing.List[str, int, float] Traceback (most recent call last): ... TypeError: Too many parameters for typing.List<~T>; actual 3, expected 1 

Tu pregunta no tiene mucho sentido ya que todo en Python es un objeto. Y una lista puede contener instancias arbitrarias de objetos si es necesario.

Depende si se habla de los elementos directos de una lista o de sus elementos indirectos.

Creo que una lista es en realidad una lista de referencias, no de objetos, y que cuando el intérprete tiene que usar una lista, sabe que, de hecho, debe manipular los objetos a los que apuntan las referencias, no las referencias en sí mismas: Ese es el “modelo de ejecución” de Python, creo.

  • Lo que llamo elemento indirecto de una lista son los objetos que constituyen el valor de la lista .

  • Lo que llamo elementos directos son las referencias a estos objetos que constituyen la implementación de la lista.

Asi que:

  • considerada como una lista de referencias , una lista es homogénea : todos los elementos son variables, en el sentido simple de variable = parte de la memoria cuyo valor puede cambiar (mientras que el valor de un objeto nunca cambia)

  • considerada como una lista de los objetos señalados por las referencias, una lista es heterogénea . La insinuación es que sus TIPOS son heterogéneos.

Esa es mi comprensión. No sé si tengo toda la razón.