列表中的对象是否深复制?

问题描述 投票:-3回答:3

我想对许多对象执行相同的操作,因此我将它们放入列表中并循环执行该操作,如下所示:

    ob1 = 0
    ob2 = 0
    mylist = [ob1, ob2]
    for i in range(len(mylist)):
        mylist[i] = 5

    print(mylist[0])
    print(ob1)

输出为0和5。我可以以某种方式修改对象,使其具有输出5和5吗?

python
3个回答
0
投票

没有python Python没有指针(以C / C ++和其他语言的方式)

也许在cPython中有一些事情要做

Python是人类可读的语言,因此请考虑python处理内存,并在程序不需要时释放内存块

因此,我认为最好不要考虑内存中的特定块,而使用复制的一个:)


0
投票

我假设do_stuff()看起来像这样:

def do_stuff(x):
    # ... some code 
    x = something

[x = something将本地名称x重新分配给其他值,并且它忘记了它以前返回原始列表的所有以前的链接。

执行所需操作的一种方法是让do_stuff()返回新值,然后在调用上下文中重写列表:

mylist = [ob1, ob2, ...]
for i in range(mylist):
    mylist[i] = do_stuff(mylist[i])

def do_stuff(x):
    # perform calculations
    return new_value

0
投票

我已经使用setattr()解决了问题:

ob1 = 0
ob2 = 0
mylist = ['ob1', 'ob2']
for name in len(mylist):
    setattr(self, name, 5)

print(mylist[0])
print(ob1)

如果有人感兴趣,我会发布它;)

© www.soinside.com 2019 - 2024. All rights reserved.