gpt4 book ai didi

python - 创建没有深拷贝的列表子类

转载 作者:太空狗 更新时间:2023-10-30 02:56:41 25 4
gpt4 key购买 nike

我想继承 list 以向其添加一些功能,例如 my_func

有没有一种方法可以在不复制整个列表的情况下执行此操作,即在创建 MyList 对象时进行浅拷贝,并让 MyList 引用相同的列表作为用于构建它的那个?

class MyList(list):
def my_func(self):
# do some stuff
return self


l1 = list(range(10))
l2 = MyList(l1)

print(l1)
print(l2)

l1[3] = -5

print(l1)
print(l2)

最佳答案

很确定这对于 list 子类是不可能的。 collections.UserList 可以 子类(在 Python 2 中为 UserList ):

from collections import UserList

class MyList(UserList):

def __init__(self, it=None):
# keep reference only for list instances
if isinstance(it, list):
self.data = it
else:
super().__init__(it)

def my_func(self):
# do some stuff
return self

UserList 公开了一个 data 的事实包含实际列表实例的属性使我们可以轻松地将其替换为可迭代的 it 并且基本上只是将提供的参数放在那里并保留引用:

像你一样初始化:

l1 = list(range(10))
l2 = MyList(l1)

print(l1, l2, sep='\n')
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

然后变异:

l1[3] = -5

当然,引用 l1data 属性发生了变异:

print(l1, l2, sep='\n')
[0, 1, 2, -5, 4, 5, 6, 7, 8, 9]
[0, 1, 2, -5, 4, 5, 6, 7, 8, 9]

关于python - 创建没有深拷贝的列表子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39730524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com