如何创建指向列表的指针,以便通过指针访问提供不可变元素?

How to create a pointer to a list, such that accessing via the pointer gives immutable elements?

假设

my_list = [[1], [2], [3], ["a"], [5]]

我要

my_imm = ImmutableList(mylist)

这样

my_imm[2][0] = 0

要么抛出错误,要么不改变 my_list[2].

有没有这样的构造不复制所有数据

还假设 my_list 很长,我不想要一个转换,而是一个惰性迭代器。


注意这不是 this 的副本,因为我希望元素是不可变的。

元组无法开箱即用。

使用生成器将元素作为元组获取:

my_imm = (tuple(e) for e in my_list)
from collections.abc import Iterable
from typing import Iterator


class MyImm(Iterable):
    def __init__(self, iterable: Iterable):
        self._iterator = iter(iterable)

    def __next__(self) -> Iterator:
        return tuple(next(self._iterator))

    def __iter__(self):
        return self


my_list = [[1], [2], [3], ["a"], [5]]
my_imm = MyImm(my_list)

for i, e in enumerate(my_imm):
    print(my_list)
    if i == 2:
        e[0] = 0

print(my_list)

输出:

"C:/code/EPMD/Kodex/Applications/EPMD-Software/LocationService/ablation/ssss.py",
line 22, in <module>
   e[0] = 0 TypeError: 'tuple' object does not support item assignment [[1], [2], [3], ['a'], [5]] [[1], [2], [3], ['a'], [5]]
[[1], [2], [3], ['a'], [5]]