如何创建指向列表的指针,以便通过指针访问提供不可变元素?
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]]
假设
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]]