Никто же например не ожидает в Си, что malloc вернёт какой-то определённый адрес. Или что обязательно будет какая-то понятная закономерность между возвращаемыми адресами двух вызовов malloc.
Да черт с ним этим is. Как тебе вот такое?
array_3 = [1, 2, 3]
array_4 = [10, 20, 30]
gen = (i + j for i in array_3 for j in array_4)
array_3 = [4, 5, 6]
array_4 = [400, 500, 600]
>>> print(list(gen))
[401, 501, 601, 402, 502, 602, 403, 503, 603]