【问题标题】:deepcopy objects faileddeepcopy 对象失败
【发布时间】:2016-06-06 00:32:44
【问题描述】:

我是社区的新手,感谢您的任何回复。我最近学习了 Python,并尝试编写一个函数来深度复制一些对象。

import copy
class node:
    def __init__(self,x):
        self.x=x

a=node(8)
d=node(10)
c=copy.deepcopy(d)
def copyNode(a):
    c=copy.deepcopy(a)
copyNode(a)
print c.x

在上面我尝试使用copyNode 函数将节点a 深度复制到c。但是,调用这个方法后,打印出来的是10,这意味着该函数不起作用。知道我哪里做错了吗?谢谢!

【问题讨论】:

  • 可变范围。您在函数内分配给c但这与全局范围内的c 不同。您应该从您的函数中复制return 对象并将其分配到那里。
  • 感谢您的帮助!我添加了 global 关键字,它可以工作!再次感谢您!
  • 不要使用global,使用returnc = copyNode(a)
  • Cody:一般来说你应该避免使用 global 关键字。当然,它有效,而且它是有目的的。但是,随着程序的增长和代码变得越来越复杂,使用全局变量(和可变状态)变得越来越危险和成问题。现在,每当您使用“全局”...考虑如何将该状态包装到一个对象类中并考虑使用它。

标签: python


【解决方案1】:

c=copy.deepcopy(a) 中的变量 c 在 copyNode 函数中本地定义。当您在那里打印 c.x 时,您会看到:

import copy
class node:
    def __init__(self,x):
        self.x=x

a=node(8)
d=node(10)
c=copy.deepcopy(d)
def copyNode(a):
    c=copy.deepcopy(a)
    print(c.x)
print(c.x)
copyNode(a)
print(c.x)

输出:10 8 10

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    • 2015-03-31
    • 2022-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多