def merge(rows1, rows2):
    """
    >>> rows1 = [{"a": 100}, {"a": 50}]
    >>> rows2 = [{"b": "foo"}, {"b": "bar"}]
    >>> actual = merge(rows1, rows2)
    >>> expected = [{"a": 100, "b": "foo"}, {"a": 50, "b": "bar"}]
    >>> assert actual == expected
    >>> assert rows1 == [{"a": 100}, {"a": 50}]  # copyしたので中身は変わらない
    """
    assert len(rows1) == len(
        rows2
    ), f"Length not equal: {len(rows1)}, {len(rows2)}"
    merged = []
    for row1, row2 in zip(rows1, rows2):
        row = row1.copy()
        row.update(row2)
        merged.append(row)
    return merged