# multiprocessing makes elements of a custom monoid incompatible

**UPD.** In fact, this issue appears with any multiprocessing of monoid's elements and it's not specific to `@parallel`

decorator.

Let's consider an example of `FiniteMonoidFromMultiplicationTable`

defined in https://ask.sagemath.org/question/32064/
I define this monoid and a list of three its elements and compute their product as follows:

```
F = FiniteMonoidFromMultiplicationTable([[0, 0, 0], [0, 1, 1], [0, 1, 2]])
E1 = [ F(0), F(1), F(2) ]
print('product1:', prod(E1) )
```

It prints `product1: 0`

- so far so good.

Now let's define the parallel `id`

function that simply returns its argument, and apply it (in parallel fashion) to `E1`

to obtain list `E2`

as follows:

```
@parallel
def id(x):
return x
E2 = [ e for _,e in id(E1) ]
print('product2:', prod(E2) )
```

However, `prod(E2)`

here results in the error

TypeError: unsupported operand parent(s) for *: 'Finite monoid on 3 elements given by its multiplication table' and 'Finite monoid on 3 elements given by its multiplication table'

which is rather weird. While `E2[0].parent() == E2[1].parent()`

evaluates to `True`

here, `E2[0].parent() is E2[1].parent()`

evaluates to `False`

and that's probably the cause for the error above.

So, my questions are: why elements of `E2`

have different parents and what needs to be changed to avoid the described issue?

PS. Just in case, here is the full code at Sagecell illustrating the issue.

I've reported the issue at https://trac.sagemath.org/ticket/34598