日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python中deepcopy函数_python – copy.deepcopy使用自定义的__new __()方法在对象上引发TypeError...

發(fā)布時(shí)間:2023/12/31 python 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中deepcopy函数_python – copy.deepcopy使用自定义的__new __()方法在对象上引发TypeError... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我想實(shí)現(xiàn)一個(gè)符號(hào)類型,它跟蹤我們已經(jīng)擁有的符號(hào)(保存在_sym_table中),如果它們存在則返回它們,否則創(chuàng)建新符號(hào).代碼:

# -*- coding: utf-8 -*-

_sym_table = {}

class Symbol(object):

def __new__(cls, sym):

if sym not in _sym_table:

return super().__new__(cls)

else:

return _sym_table[sym]

def __init__(self, sym):

self.sym = sym

_sym_table[sym] = self

def __str__(self):

return self.sym

def __cmp__(self, other):

return self is other

def __hash__(self):

return self.sym.__hash__()

但是當(dāng)我在這樣的Symbol實(shí)例列表上調(diào)用copy.deepcopy時(shí),會(huì)引發(fā)異常:

a = Symbol('a')

b = Symbol('b')

s = [a, b]

t = copy.deepcopy(s)

錯(cuò)誤消息:

Traceback (most recent call last):

File "xxx.py", line 7, in

t = copy.deepcopy(s)

File "/usr/lib/python3.2/copy.py", line 147, in deepcopy

y = copier(x, memo)

File "/usr/lib/python3.2/copy.py", line 209, in _deepcopy_list

y.append(deepcopy(a, memo))

File "/usr/lib/python3.2/copy.py", line 174, in deepcopy

y = _reconstruct(x, rv, 1, memo)

File "/usr/lib/python3.2/copy.py", line 285, in _reconstruct

y = callable(*args)

File "/usr/lib/python3.2/copyreg.py", line 88, in __newobj__

return cls.__new__(cls, *args)

TypeError: __new__() takes exactly 2 arguments (1 given)

所以我的問(wèn)題是:

>如何使用自定義的__new__方法對(duì)這些對(duì)象進(jìn)行深層復(fù)制?

>以及關(guān)于何時(shí)以及如何使用copy.deepcopy的任何建議?

非常感謝!

總結(jié)

以上是生活随笔為你收集整理的python中deepcopy函数_python – copy.deepcopy使用自定义的__new __()方法在对象上引发TypeError...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。