elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


  Mostrar Mensajes
Páginas: 1 [2] 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ... 229
11  Foros Generales / Dudas Generales / Re: Cuenta inaccesible en: 14 Enero 2025, 15:09 pm
Se parece mucho al caso de aquí:
https://foro.elhacker.net/hacking/hackeo_de_una_cuenta_de_instagram-t522897.0.html

Si no son conocidos, se refuerza mi dicho de no usar más Insta. Ni Paypal, en tu caso.
12  Informática / Software / Mi Notepad++ no cambia el tamaño de la fuente. en: 14 Enero 2025, 14:49 pm


Versión 8.7.5

¿Será porque eso se aplica cuando escribo ahí, no si cargo un archivo hecho con el bloc de notas común?

Sino me serviría que el zoom iniciara siempre con 300% por decir algo ¿cómo soluciono estos obstáculos?
13  Seguridad Informática / Hacking / Re: Hackeo de una cuenta de instagram en: 13 Enero 2025, 23:10 pm
No me gusta decir cosas emocionales pero me surge decir que no se entiende nada  :o

Tenía una cuenta asociada a un email A.

Recibió un email diciendo que ahora estaba asociada a un email B, que asumí que no era suyo, no sé si le dijeron cual. ¿Le dijeron?

Al intentar entrar a su cuenta, no existía. ¿Cómo intentó entrar, normal o por algún link de email?

La intentó recuperar pero fallaba.

Ahora pudo.

Tendrías que preguntarle a los que controlan Insta qué pasó. Los emails asociados no se cambian solos, supongo. Pero tampoco hubo una señal clara de hackeo, que le pidieran dinero o algo. Y encima ahora todo se arregla como si nada... ¿Qué pasó con lo de que no existía? No sé, todo muy raro.

Yo que uds no usaba más Insta, o sea, una página que da tantos problemas insta a no usarla más.
14  Foros Generales / Dudas Generales / ¿Qué es un archivo .nsm? en: 13 Enero 2025, 21:42 pm
No conseguí la respuesta.

Al abrirlo con el bloc de notas no aparece algo claro, es mucho espacio vacío y caracteres raros.

Es de 2002 dice, aunque quién sabe.

Pesa 22,9 KB (23.530 bytes).

El nombre prefiero no decirlo por las dudas, pero no es algo vergonzoso ni algo así xP

¿Cómo averiguo qué es?
15  Media / Diseño Gráfico / Reducir tamaño de la hoja, no de la imagen. en: 13 Enero 2025, 20:41 pm
Hace mucho, cuando pegaba una imagen en Paint más grande que la hoja actual, me parecía absurdo que me preguntara si quería agrandar la hoja ¡obvio que sí!

Pero con el tiempo, me empezó a servir poner que no, porque si tomaba una foto pero sólo quería una parte, y luego tomaba otras fotos, porque era un video por ejemplo, me servía que el tamaño de la hoja se mantuviera como lo dejé, para guardar los archivos más rápido, de modo que se viera lo que yo quería y no la foto entera.

Desde que tengo Windows 7, Paint agranda la hoja sin preguntarme, y no veo la opción de modificarle el tamaño (la opción que veo modifica también la imagen, antes creo que no era así, yo no quiero que se agrande/achique la imagen, sólo la hoja), así que ¿con qué programa y cómo podría lograr lo que quiero?

Son varias fotos de un archivo de Flash, que al tomar foto sale el menú y las herramientas, podría modificar algunas cosas pero si cada vez que quiera tomar fotos debo hacer eso no me conviene.

Tomo una foto, supongamos que es así:
xxxx
xAAx
xAAx
xxxx
Yo sólo quiero guardar la parte de las A. Para eso pego la imagen en Paint, la muevo hacia arriba e izquierda para quitar las x de esos sitios, y me queda así:
AAxb
AAxb
xxxb
bbbb
Donde b es blanco, y yo ahora quiero reducir la hoja de modo que sólo queden las A. Debería ser fácil...
16  Programación / Python / Re: Buscador de combinaciones inexistentes no funciona. en: 13 Enero 2025, 19:43 pm
Línea 4, caracter No UTF-8 encontrado.

Código
  1. import itertools
  2.  
  3. def cargar_diccionario(ruta):
  4.    """Carga el diccionario desde un archivo .txt y devuelve un conjunto de palabras en minúsculas."""
  5.    with open(ruta, 'r', encoding='utf-8') as archivo:
  6.        return set(palabra.strip().lower() for palabra in archivo)
  7. ...

Lo que te está dando problemas es la palabra minúsculas por la tilde en la u. Y esto ya se explicó en un mensaje anterior donde te pasó lo mismo con la ñ: https://foro.elhacker.net/python/python_falla_en_usar_la_n-t522777.0.html
Me había olvidado.

Pero yo el texto lo veo igual ¿por qué para él es tan diferente? Suena como a que un visor de imágenes no pueda cargar un PNG o algún formato normal, suena limitadito >__<

Si el UTF-8 acepta tildes y Python trabaja con UTF-8 ¿por qué si le doy un archivo con un tilde actúa como si le estuviera dando algo que no puede manejar? ¿es que a nivel de lenguaje máquina lo expresa distinto?

Citar
Que editor de texto estás usando? usa uno decente como Notepad++ al menos, este ya trabaja en UTF-8 por defecto.
Uso el Notepad común para muchas cosas por lo liviano que es, Word me pone un cartel de que se está cargando, luego algo de la licencia, los márgenes están mal y la fuente no me gusta, cuando lo uso abro un archivo preesistente que tengo y lo edito, pero en fin, en general me conviene más el Notepad común.
Para esto, en cambio, probaré el que dices.
17  Programación / Programación General / IA para 2 en línea horizontal. en: 12 Enero 2025, 23:55 pm
El juego es una simplificación del 3 en línea:
- El tablero en vez de ser de 3x3 casilleros es de 2x2.
- Lo que debe formarse, en vez de ser una línea horizontal, vertical o diagonal de 3 signos iguales, debe ser de 2 pero horizontal.

Claro que es menos interesante que el original, es que se me complicó.

Hay a grandes rásgos 3 tipos de IA, díganme otras si me faltan:
A- La que sabe jugar como el programador le dijo, no aprende.
B- La que sabe jugar según lo que entrenó, aprendió todo lo necesario.
C- La que está aprendiendo, aprende mientras juega.

El problema de A es que si el juego es complejo, no hay persona que sepa el modo ideal de jugar, y tampoco es fácil expresarlo.

B requiere más tiempo lograrse entre más complejo sea el juego, por lo que llaman explosión combinatoria o algo así.

C, entre más complejo sea el juego, menos útil es, porque difícilmente llegue a aprender todo lo necesario para jugar bien. El jugador podría hacer cosas distintas hasta el cansancio y en tales casos la IA sería como si recién empezara.

Supongo que pueden pulirse de distintos modos, pero no sé bien cómo.

A, en este caso simple sería así creo:
Código:
Si IA usa X:
   // Intentar ganar:
   Si Casillero1_1 == "" && Casillero1_2 == "X"
      Poner X en 1_1
   sino si Casillero1_1 == "X" && Casillero1_2 == ""
      Poner X en 1_2
   Si Casillero2_1 == "" && Casillero2_2 == "X"
      Poner X en 2_1
   sino si Casillero2_1 == "X" && Casillero2_2 == ""
      Poner X en 2_2
   sino
      // Ya no es posible ganar (perder nunca fue):
      Poner en cualquiera vacío.
sino
   // Evitar perder:
   Si Casillero1_1 == "" && Casillero1_2 == "X"
      Poner 0 en 1_1
   sino si Casillero1_1 == "X" && Casillero1_2 == ""
      Poner 0 en 1_2
   Si Casillero2_1 == "" && Casillero2_2 == "X"
      Poner 0 en 2_1
   sino si Casillero2_1 == "X" && Casillero2_2 == ""
      Poner 0 en 2_2
   sino
      // Ya no es posible perder:
      Poner en el único vacío que queda.

Sobre C no pensé mucho.

B es más difícil de lo que creí, a ver si me dan ideas.

Mi idea es algo así:
- En la situación inicial (tablero todo vacío), se prueban las acciones posibles y si se llega a una situación que no está en la lista de situaciones no resueltas, se agrega. Al principio esa lista está vacía, ahora habrá 4 porque 4 son las posibles consecuencias de las 4 posibles acciones.
- Se genera una de las situaciones de la lista. Probamos las posibles acciones, ahora el signo es 0 en vez de X. Si obtenemos situaciones que no estén en la lista, de nuevo, las anotamos.
- Repetimos eso con cada situación, el signo a poner depende de cuales sean, y llegará un punto en que poner un signo causará una victoria, por ejemplo en esta:
XV
0V
(V es vacío)
La acción nro 2 (casillero 1_2, al lado de la X) causa victoria. Cuando eso ocurre, creamos unas variables cuyos nombres implican la situación anterior a la victoria, en el ejemplo sería XV0V, y ponemos una S delante para menos lío, sabemos que S significa situación. Bueno, las variables van a ser por ejemplo:
SXV0VBestAction = 2
SXV0VDistanciaDeVictoria = 1
Significa que en esa situación conviene la acción 2 y que hace falta sólo 1 acción para llegar a la victoria.
Eliminamos esa acción de la lista de situaciones sin resolver.
- Cuando hayamos recorrido la lista de situaciones, comenzamos a recorrerla de nuevo, pero no sé bien qué debería hacerse ahora específicamente.

En programas "similares" que había hecho, lo que se hacía era que si se llega a una situación cuya DistanciaDeVictoria fuese 1, a la anterior situación se le asignaba que DistanciaDeVictoria fuese 2, y así se repite realizar acciones, asignar "puntajes" a las situaciones, eliminarlas de la lista, y en cada nueva repetición aumentar el número asignado a DistanciaDeVictoria, hasta que ya no queden situaciones a investigar.

Pero en este caso no se puede porque hay turnos, hay rivales, a ver:

Si sólo hubiera X, sería así:
Comenzamos investigando la situación
VV
VV
Probamos una acción
XV
VV
Anotamos esa situación en la lista de no resueltas.
Probamos otra acción en la situación que estamos investigando, nos queda:
VX
VV
En fin, en cierto punto vamos a investigar esta:
XV
VV
Realizamos una acción que causa victoria
XX
VV
Entonces definimos:
SXVVVBestAction=2
SXV0VDistanciaDeVictoria = 1
Y en otro punto, cuando volvamos a investigar situaciones aún no resueltas, como esta:
VV
VV
Cuando hagamos esto:
XV
VV
Llegamos a una que la tenemos evaluada como 1, entonces a la anterior (la que puse arriba, todo V) le vamos a poner 2. Está clarísimo, se requieren 2 acciones para ganar desde el inicio.

Pero hay 0, así que luego de hallar todas las victorias posibles, cuando volvamos a investigar situaciones aún no resueltas, como esta:
XV
VV
Sabemos que es turno del 0, que si pone en 2_1 o 2_2 se llegará a una situación cuya DistanciaDeVictoria es 1, pero para X, para 0 es 1 de la derrota, así que el programa no puede ponerle 2, eso se interpretaría como que a 0 le hacen falta 2 acciones para ganar, que es segurto que ganará, lo cual no es así.

¿La solución es crear otra variable? ¿que exista DistanciaDeVictoriaDeX y DistanciaDeVictoriaDe0? Hay que tener en cuenta la explosión combinatoria, no conviene crear variables en lo posibñe, además no veo bien cómo eso lo resolvería.
A ver, si no llega a una situación cuya DistanciaDeVictoriaDe0 sea 1 (cosa imposible, 0 no puede ganar), nada se anota al respecto. Y cuando la distancia de X es 1, se anota que de 0 es -1, es decir que está a 1 acción de ser derrotado. La distancia ideal es positiva y en 2nda instancia lo más cercana a 0 posible.
Bueno... cuando en una búsqueda no se anoten cosas, es decir no se llegue a situaciones resueltas, se comenzaría a anotar las que lleguen a distancias -1, luego a -2, y así, podría ser que se llegue a resolver todas las situaciones.

¿Creen que eso funcionará? ¿no, por qué?

¿Es posible usar sólo una distancia? ¿sí, cómo?

¿Cómo sería un método más rápido y eficiente? Imagino que deduciendo en base a rotar el tablero o considerar simetría, pero creo que debe haber algo como aprender la regla, aprender un código a seguir, no esto de aprender qué hacer en la situación 1, 2, 3... Cuando juegue, sería bueno que siga un código como el que puse al inicio, en vez de "llamar a la función SXVVV" (o sea, cargar los datos de esa situación a ver qué acción conviene en ella), porque cuando sean MUCHAS posibles situaciones, es un disparate hacerlo así, por la explosión ¿no? Imagina un 5 en línea en un tablero de 25x25 con 5 jugadores, por decir algo.
18  Programación / Programación General / En muchos lenguajes, tempArray = array ¿es una referencia y les parece bien? en: 12 Enero 2025, 21:51 pm
A esto:
https://foro.elhacker.net/programacion_general/iquestque_metodo_es_recomendado_para_ordenar_al_azar_un_array-t522940.0.html
...quería agregarle eficientemente que el nuevo array pudiera tener menos elementos que el original. Como no se me ocurrió bien cómo, consulté a GPT:

En Macromedia Flash 5 tengo un array de 3 elementos y quiero que se genere otro array con 2 de esos elementos al azar, y ordenados al azar ¿cómo?

Citar
En **Macromedia Flash 5**, puedes usar `ActionScript` para lograr lo que necesitas: generar un nuevo array con dos elementos seleccionados al azar del array original, y luego ordenarlos aleatoriamente. Aquí tienes un ejemplo de código que hace exactamente eso:

```actionscript
// Array original con 3 elementos
var originalArray = ["Elemento1", "Elemento2", "Elemento3"];

// Función para seleccionar 2 elementos al azar del array original
function getRandomElements(array) {
    // Copiar el array original para no modificarlo
    var tempArray = array.slice(0);
    var randomArray = [];
    
    // Seleccionar 2 elementos al azar
    for (var i = 0; i < 2; i++) {
        var randomIndex = Math.floor(Math.random() * tempArray.length);
        randomArray.push(tempArray[randomIndex]);
        // Remover el elemento seleccionado para evitar duplicados
        tempArray.splice(randomIndex, 1);
    }
    
    // Mezclar los elementos seleccionados
    randomArray.sort(function() {
        return Math.random() - 0.5;
    });
    
    return randomArray;
}

// Generar el nuevo array con 2 elementos al azar y ordenados al azar
var newArray = getRandomElements(originalArray);

// Mostrar el resultado
trace("Array original: " + originalArray);
trace("Nuevo array: " + newArray);
```

### Explicación del código:

1. **Copia del array original**:
   - Usamos `slice(0)` para crear una copia del array original, de modo que no lo modifiquemos al eliminar elementos.

2. **Selección aleatoria**:
   - En el loop, se seleccionan dos elementos al azar usando `Math.random()` y se eliminan del array temporal (`tempArray`) con `splice()`, para evitar duplicados.

3. **Orden aleatorio**:
   - Usamos `sort()` con una función de comparación que devuelve un valor aleatorio para mezclar los elementos seleccionados.

4. **Resultado**:
   - El nuevo array (`newArray`) contiene dos elementos seleccionados al azar del array original, y están ordenados de manera aleatoria.

### Ejemplo de salida:

Si el array original es `["Elemento1", "Elemento2", "Elemento3"]`, la salida podría ser algo como:

```
Array original: Elemento1,Elemento2,Elemento3
Nuevo array: Elemento2,Elemento1
```

Cada vez que ejecutes el código, la selección y el orden serán diferentes.

¿por qué pones
var tempArray = array.slice(0);
en vez de
tempArray = array;
?

Citar
La razón por la que usé:

```actionscript
var tempArray = array.slice(0);
```

en lugar de:

```actionscript
tempArray = array;
```

es para **crear una copia del array original**, en lugar de simplemente referenciarlo.

### Diferencia entre copiar y referenciar un array:

- **`tempArray = array;`**  
  Esto no crea un nuevo array. En lugar de ello, `tempArray` apunta al mismo espacio de memoria que el array original (`array`). Si modificas `tempArray` (como eliminar elementos con `splice()`), también estarás modificando el array original, porque ambos comparten el mismo contenido.

- **`tempArray = array.slice(0);`**  
  Esto crea una **copia del array original**. Cualquier cambio que hagas en `tempArray` no afectará al array original, ya que ahora son dos arrays independientes.

### ¿Por qué es importante en este caso?

En el código, usamos `splice()` para eliminar elementos del array temporal (`tempArray`) mientras seleccionamos elementos aleatorios. Si no hacemos una copia (usando `slice()`), también estaríamos eliminando elementos del array original, lo cual probablemente no sea lo que queremos.

### Ejemplo práctico:

Supongamos que tienes este código:

```actionscript
var originalArray = ["Elemento1", "Elemento2", "Elemento3"];
var tempArray = originalArray;

// Modificar tempArray
tempArray.splice(0, 1);

// Imprimir ambos arrays
trace("originalArray: " + originalArray);
trace("tempArray: " + tempArray);
```

**Salida:**

```
originalArray: Elemento2,Elemento3
tempArray: Elemento2,Elemento3
```

Como ves, al modificar `tempArray`, también se modifica `originalArray`, porque ambos apuntan al mismo array.

Ahora, usando `slice(0)`:

```actionscript
var originalArray = ["Elemento1", "Elemento2", "Elemento3"];
var tempArray = originalArray.slice(0);

// Modificar tempArray
tempArray.splice(0, 1);

// Imprimir ambos arrays
trace("originalArray: " + originalArray);
trace("tempArray: " + tempArray);
```

**Salida:**

```
originalArray: Elemento1,Elemento2,Elemento3
tempArray: Elemento2,Elemento3
```

Aquí, `originalArray` permanece intacto, porque `tempArray` es una copia independiente.

### Conclusión:

Usar `slice(0)` asegura que puedas trabajar con un array temporal sin modificar el array original. Esto es crucial cuando necesitas preservar el estado del array original para otros usos o simplemente para evitar efectos secundarios no deseados.

Poner un nombre, luego = y luego un valor, es crear una variable cuyo nombre es el indicado en nombre y su valor es indicado luego del signo =, no es una referencia ¿o estoy equivocado?

Citar
Estás en lo correcto en términos generales: cuando haces algo como:

```actionscript
var nombre = valor;
```

estás creando una variable llamada `nombre` y asignándole el valor de `valor`. Sin embargo, **el comportamiento de la variable depende del tipo de dato que estés asignando**. En ActionScript (y en muchos lenguajes de programación), los tipos de datos se dividen principalmente en dos categorías:

1. **Tipos primitivos** (números, cadenas, booleanos, etc.).
2. **Tipos complejos o de referencia** (objetos, arrays, etc.).

La diferencia clave radica en cómo se asignan y manejan los valores en memoria.

---

### Tipos primitivos: Copia del valor

Cuando asignas un tipo primitivo a una variable, se copia su valor directamente en la nueva variable. Por ejemplo:

```actionscript
var a = 5;
var b = a;
b = 10;

trace(a); // 5
trace(b); // 10
```

Aquí, `a` y `b` son independientes, porque el número `5` (un tipo primitivo) se copió en `b`. Cambiar `b` no afecta a `a`.

---

### Tipos complejos (como arrays): Referencia en memoria

Cuando trabajas con tipos complejos, como arrays u objetos, lo que realmente estás asignando no es el "valor" en sí, sino una **referencia en memoria** al lugar donde se almacenan esos datos. Esto significa que si usas el operador `=` para asignar un array a otra variable, ambas variables apuntarán al mismo array en memoria. Por ejemplo:

```actionscript
var originalArray = [1, 2, 3];
var otherArray = originalArray;

otherArray.push(4);

trace(originalArray); // [1, 2, 3, 4]
trace(otherArray);    // [1, 2, 3, 4]
```

Aquí, tanto `originalArray` como `otherArray` apuntan al mismo array en memoria. Al modificar `otherArray`, también estás modificando `originalArray`.

Si quieres evitar este comportamiento y trabajar con una copia independiente del array, necesitas crear una copia explícita, como con el método `slice()`:

```actionscript
var originalArray = [1, 2, 3];
var otherArray = originalArray.slice(0);

otherArray.push(4);

trace(originalArray); // [1, 2, 3]
trace(otherArray);    // [1, 2, 3, 4]
```

Ahora, `originalArray` y `otherArray` son arrays completamente separados, y los cambios en uno no afectan al otro.

---

### Conclusión

Cuando haces:

```actionscript
tempArray = array;
```

no estás creando un nuevo array. Estás haciendo que `tempArray` apunte al mismo array en memoria que `array`. Por eso, cualquier cambio que hagas en `tempArray` también se verá reflejado en `array`.

Si quisieras que `tempArray` sea una copia independiente del contenido de `array` (sin afectar al original), necesitas usar algo como:

```actionscript
tempArray = array.slice(0);
```

Esto crea un nuevo array con el mismo contenido, pero almacenado en un espacio de memoria diferente.

En resumen: la diferencia entre **valor** y **referencia** es lo que causa este comportamiento.

¿Por qué lo hicieron así?

Citar
Implementar arrays y objetos como **tipos por referencia** en lenguajes como ActionScript (y otros lenguajes como javascript, Python, etc.) no es algo arbitrario, tiene razones prácticas y de diseño. Aquí te explico por qué **los arrays y objetos funcionan por referencia** y no como copias directas:

---

## 1. **Eficiencia en memoria y rendimiento**
Cuando trabajas con tipos complejos como arrays u objetos, estos pueden contener grandes cantidades de información. Si cada vez que los asignaras a una nueva variable se hiciera una copia completa de los datos, esto consumiría mucha memoria y sería muy lento.

Por ejemplo, considera este caso:

```actionscript
var arrayGrande = [1, 2, 3, ..., 100000]; // Un array con 100,000 elementos
var copia = arrayGrande; // ¿Qué pasaría si fuera una copia completa?
```

Si el lenguaje copiara todo el array al asignarlo, el programa tendría que:

1. Reservar **el doble** de espacio en memoria para almacenar los mismos datos.
2. Copiar cada uno de los 100,000 elementos al nuevo array.

Esto haría que las operaciones de asignación fueran lentas y que el uso de memoria se disparara rápidamente en aplicaciones que manejan muchos datos.

**Por referencia**, en cambio, el lenguaje simplemente crea un "puntero" o "referencia" al espacio de memoria donde ya está almacenado el array. Esto es mucho más rápido y eficiente porque no duplica los datos, sino que solo comparte la referencia.

---

## 2. **Facilita la mutabilidad**
Cuando trabajas con objetos y arrays, muchas veces necesitas que todos los cambios se reflejen en el mismo lugar. Si los arrays fueran siempre copiados al asignarlos, sería complicado coordinar los cambios entre diferentes partes de tu código.

Por ejemplo:

```actionscript
var config = { ancho: 800, alto: 600 };
var referencia = config;

referencia.ancho = 1024;

trace(config.ancho); // 1024
```

Aquí, tanto `config` como `referencia` apuntan al mismo objeto. Si cambias un valor en `referencia`, también se refleja en `config`, porque ambos son referencias al mismo objeto. Esto facilita que múltiples variables o funciones trabajen con los mismos datos sin necesidad de copiar y sincronizar los cambios manualmente.

Si los objetos fueran copiados automáticamente, el cambio en `referencia` no afectaría a `config`, y tendrías que buscar formas más complicadas de mantenerlos sincronizados.

---

## 3. **Es coherente con el diseño de programación orientada a objetos**
Los lenguajes como ActionScript están diseñados para manejar objetos de manera flexible. En este paradigma, los objetos y arrays suelen comportarse como entidades compartidas, **en lugar de duplicarse automáticamente**. Esto es clave para trabajar con estructuras de datos dinámicas, como listas enlazadas, árboles, o gráficos, donde las relaciones entre los elementos son importantes.

Por ejemplo:

```actionscript
var nodo1 = { valor: 1, siguiente: null };
var nodo2 = { valor: 2, siguiente: nodo1 };

trace(nodo2.siguiente.valor); // 1
```

Este tipo de estructuras serían mucho más difíciles de implementar si cada asignación hiciera copias completas de los datos.

---

## 4. **Consistencia con otros lenguajes**
ActionScript heredó muchas de sus características de javascript (que, a su vez, está inspirado en otros lenguajes como Java). En todos estos lenguajes, los objetos y arrays funcionan por referencia. Esto hace que el comportamiento sea predecible y **consistente con el estándar de la industria**, lo que facilita a los programadores aprender y trabajar con lenguajes similares.

---

## ¿Por qué no hacerlo todo por valor?
Si trabajar por referencia es tan eficiente, podrías preguntarte por qué no todos los tipos de datos funcionan así. La razón es que **los tipos primitivos (como números, cadenas y booleanos)** son mucho más simples y pequeños en términos de tamaño en memoria. Duplicarlos no es costoso y, en la mayoría de los casos, es más útil que sean independientes.

Por ejemplo:

```actionscript
var a = 5;
var b = a;
b = 10;

trace(a); // Todavía es 5
trace(b); // Es 10
```

En este caso, trabajar **por valor** tiene sentido porque los números son pequeñas cantidades de datos y se espera que sean independientes.

---

## Conclusión
Los arrays y objetos funcionan por referencia porque:

1. **Es más eficiente** en términos de memoria y rendimiento.
2. **Facilita la mutabilidad**, permitiendo que los cambios se reflejen automáticamente en todas las referencias.
3. **Es coherente** con el diseño de programación orientada a objetos.
4. **Sigue un estándar** que es consistente con otros lenguajes.

Aunque este comportamiento puede parecer confuso al principio, con el tiempo te darás cuenta de que es una decisión lógica y práctica para manejar datos complejos. Si necesitas una copia independiente, siempre puedes usar métodos como `slice()` o técnicas específicas para clonar objetos y arrays.

No le veo sentido, si quiero crear una copia debería poder hacerlo normalmente no con "slice", si consume mucho entonces el programador debería saberlo y no usarlo salvo que sea útil ¿por qué limitarnos?

Claro que no entendí todos los motivos que dice ahí, que una variable tenga 2 nombres puede ser útil pero... Si fuese así, debería poder hacerse con variables simples, y sobretodo debería poder hacerse de otro modo. Que una misma expresión, tan básica, haga cosas distintas según el tipo de variable parece absurdo.

¿Qué opinan?

Edit: Sabía que había excepciones a eso, tenemos por ejemplo que Número+Número es una suma pero si alguno de esos números es cadena entonces el + es concatenar. Pero vamos, no es lo mismo el + que el =. El = es sagrado xP

Edit2: Es como si al copiar un archivo en Windows, este en vez de eso copiara un acceso directo. Joder, si quiero una copia porque voy a modificar una, dejame copiar tranquilo  >:(
19  Programación / Python / Re: Buscador de combinaciones inexistentes no funciona. en: 10 Enero 2025, 13:20 pm
Dice esto:


Estos son los diccionarios que estoy usando:

https://drive.google.com/file/d/1J6nsG3ULYdi5BnGdCe2qT-FlCvQhwcWJ/view?usp=sharing

https://drive.google.com/file/d/1tYik1tRlULdBiiqQKM05yahLP44v63C1/view?usp=sharing

¿Qué hago?

Casi seguro el problema son los diccionarios o la parte de cargarlos, porque fui quitando partes del código y cuando quité lo de cargarlos funcionó.

La página que sugiere:
https://peps.python.org/pep-0263/
Debo irme pero la leeré cuando pueda, aunque no creo que lo entienda.
20  Foros Generales / Sugerencias y dudas sobre el Foro / Re: Advertencia (o casualidad) sobre el tema de Hason. en: 10 Enero 2025, 11:35 am
Me volvió a ocurrir en otros casos, aparentemente es cuando la PC o la conexión se está iniciando.
Páginas: 1 [2] 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ... 229
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines