¿Por qué un mapa js en una matriz modifica la matriz original?

Estoy bastante confundido por el comportamiento de map ().

Tengo una serie de objetos como este:

const products = [{
    ...,
    'productType' = 'premium',
    ...
}, ...]

y estoy pasando esta matriz a una función que debería devolver la misma matriz pero con todo el producto hecho gratis:

[{
    ...,
    'productType' = 'free',
    ...
}, ...]

La función es:

const freeProduct = function(products){
    return products.map(x => x.productType = "free")
}

Que devuelve la siguiente matriz:

["free", "free", ...]

Así que reescribí mi función para ser:

const freeProduct = function(products){
    return products.map(x => {x.productType = "free"; return x})
}

Lo que devuelve la matriz según lo previsto.

PERO ! Y ese es el momento en que pierdo la cabeza, en ambos casos mi matriz de productos original se modifica.

La documentación sobre map () dice que no debería (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map )

Incluso intenté crear un clon de mi matriz convirtiendo mi función de esta manera

const freeProduct = function(products){
    p = products.splice()
    return p.map(x => {x.productType = "free"; return x})
}

Pero sigo obteniendo el mismo resultado (que comienza a volverme loco).

¡Estaría muy agradecido con cualquiera que pueda explicarme lo que estoy haciendo mal!

Gracias

Respuestas a la pregunta(2)

Su respuesta a la pregunta