/usr/lib64/python3.9
NameSizeModeActions
asyncio/-0755rm
collections/-0755rm
concurrent/-0755rm
config-3.9-x86_64-linux-gnu/-0755rm
ctypes/-0755rm
curses/-0755rm
dbm/-0755rm
distutils/-0755rm
email/-0755rm
encodings/-0755rm
ensurepip/-0755rm
html/-0755rm
http/-0755rm
importlib/-0755rm
json/-0755rm
lib-dynload/-0755rm
lib2to3/-0755rm
logging/-0755rm
multiprocessing/-0755rm
pydoc_data/-0755rm
site-packages/-0755rm
sqlite3/-0755rm
unittest/-0755rm
urllib/-0755rm
venv/-0755rm
wsgiref/-0755rm
xml/-0755rm
xmlrpc/-0755rm
zoneinfo/-0755rm
__pycache__/-0755rm
abc.py49200644editdlrm
aifc.py326050644editdlrm
antigravity.py5000644editdlrm
argparse.py981190644editdlrm
ast.py562560644editdlrm
asynchat.py113210644editdlrm
asyncore.py201020644editdlrm
base64.py198590755editdlrm
bdb.py313890644editdlrm
binhex.py147840644editdlrm
bisect.py23500644editdlrm
bz2.py124470644editdlrm
calendar.py248320644editdlrm
cgi.py339320755editdlrm
cgitb.py120960644editdlrm
chunk.py54350644editdlrm
cmd.py148600644editdlrm
code.py106220644editdlrm
codecs.py366730644editdlrm
codeop.py63260644editdlrm
colorsys.py40640644editdlrm
compileall.py201050644editdlrm
configparser.py545840644editdlrm
contextlib.py246240644editdlrm
contextvars.py1290644editdlrm
copy.py86500644editdlrm
copyreg.py72740644editdlrm
cProfile.py63450755editdlrm
crypt.py38190644editdlrm
csv.py161440644editdlrm
dataclasses.py495860644editdlrm
datetime.py891770644editdlrm
decimal.py3200644editdlrm
difflib.py833070644editdlrm
dis.py205700644editdlrm
doctest.py1045680644editdlrm
enum.py394400644editdlrm
filecmp.py100240644editdlrm
fileinput.py147910644editdlrm
fnmatch.py60040644editdlrm
formatter.py151430644editdlrm
fractions.py243230644editdlrm
ftplib.py354960644editdlrm
functools.py388810644editdlrm
genericpath.py52460644editdlrm
getopt.py74890644editdlrm
getpass.py59900644editdlrm
gettext.py272660644editdlrm
glob.py58230644editdlrm
graphlib.py95730644editdlrm
gzip.py217720644editdlrm
hashlib.py80690644editdlrm
heapq.py228770644editdlrm
hmac.py80430644editdlrm
imaplib.py552560644editdlrm
imghdr.py38080644editdlrm
imp.py105360644editdlrm
inspect.py1182350644editdlrm
io.py35410644editdlrm
ipaddress.py809240644editdlrm
keyword.py10470644editdlrm
LICENSE.txt139370644editdlrm
linecache.py54610644editdlrm
locale.py782710644editdlrm
lzma.py132310644editdlrm
mailbox.py787940644editdlrm
mailcap.py91160644editdlrm
mimetypes.py215640644editdlrm
modulefinder.py244010644editdlrm
netrc.py55660644editdlrm
nntplib.py410230644editdlrm
ntpath.py264600644editdlrm
nturl2path.py28870644editdlrm
numbers.py103380644editdlrm
opcode.py56600644editdlrm
operator.py107510644editdlrm
optparse.py603690644editdlrm
os.py390650644editdlrm
pathlib.py511340644editdlrm
pdb.py632370755editdlrm
pickle.py649200644editdlrm
pickletools.py934860644editdlrm
pipes.py89160644editdlrm
pkgutil.py242760644editdlrm
platform.py406010755editdlrm
plistlib.py282480644editdlrm
poplib.py151980644editdlrm
posixpath.py161460644editdlrm
pprint.py225270644editdlrm
profile.py228810755editdlrm
pstats.py293260644editdlrm
pty.py48070644editdlrm
pyclbr.py152550644editdlrm
pydoc.py1095990755editdlrm
py_compile.py82030644editdlrm
queue.py114960644editdlrm
quopri.py72660755editdlrm
random.py314840644editdlrm
re.py158610644editdlrm
reprlib.py52670644editdlrm
rlcompleter.py76480644editdlrm
runpy.py130840644editdlrm
sched.py64420644editdlrm
secrets.py20360644editdlrm
selectors.py195360644editdlrm
shelve.py85270644editdlrm
shlex.py135010644editdlrm
shutil.py530300644editdlrm
signal.py24380644editdlrm
site.py220850644editdlrm
smtpd.py348210755editdlrm
smtplib.py454050755editdlrm
sndhdr.py70990644editdlrm
socket.py369150644editdlrm
socketserver.py272960644editdlrm
sre_compile.py279730644editdlrm
sre_constants.py71770644editdlrm
sre_parse.py407790644editdlrm
ssl.py526220644editdlrm
stat.py54850644editdlrm
statistics.py380670644editdlrm
string.py105660644editdlrm
stringprep.py129170644editdlrm
struct.py2570644editdlrm
subprocess.py835640644editdlrm
sunau.py181580644editdlrm
symbol.py22810644editdlrm
symtable.py79050644editdlrm
sysconfig.py255570644editdlrm
tabnanny.py114060755editdlrm
tarfile.py1129390755editdlrm
telnetlib.py232540644editdlrm
tempfile.py279630644editdlrm
textwrap.py194070644editdlrm
this.py10030644editdlrm
threading.py541760644editdlrm
timeit.py134800755editdlrm
token.py23680644editdlrm
tokenize.py258830644editdlrm
trace.py292070755editdlrm
traceback.py246600644editdlrm
tracemalloc.py180470644editdlrm
tty.py8790644editdlrm
types.py97850644editdlrm
typing.py770440644editdlrm
uu.py72770644editdlrm
uuid.py273240644editdlrm
warnings.py196880644editdlrm
wave.py180040644editdlrm
weakref.py215600644editdlrm
webbrowser.py240830755editdlrm
xdrlib.py59130644editdlrm
zipapp.py75350644editdlrm
zipfile.py888990644editdlrm
zipimport.py307650644editdlrm
_aix_support.py33890644editdlrm
_bootlocale.py18010644editdlrm
_bootsubprocess.py26750644editdlrm
_collections_abc.py293740644editdlrm
_compat_pickle.py87490644editdlrm
_compression.py53400644editdlrm
_markupbase.py146230644editdlrm
_osx_support.py217730644editdlrm
_pydecimal.py2286660644editdlrm
_pyio.py933160644editdlrm
_py_abc.py61890644editdlrm
_sitebuiltins.py31150644editdlrm
_strptime.py252770644editdlrm
_sysconfigdata__linux_x86_64-linux-gnu.py412360644editdlrm
_threading_local.py72200644editdlrm
_weakrefset.py59230644editdlrm
__future__.py51470644editdlrm
__phello__.foo.py640644editdlrm
Edit: /usr/lib64/python3.9/copy.py (8650B)
"""Generic (shallow and deep) copying operations. Interface summary: import copy x = copy.copy(y) # make a shallow copy of y x = copy.deepcopy(y) # make a deep copy of y For module specific errors, copy.Error is raised. The difference between shallow and deep copying is only relevant for compound objects (objects that contain other objects, like lists or class instances). - A shallow copy constructs a new compound object and then (to the extent possible) inserts *the same objects* into it that the original contains. - A deep copy constructs a new compound object and then, recursively, inserts *copies* into it of the objects found in the original. Two problems often exist with deep copy operations that don't exist with shallow copy operations: a) recursive objects (compound objects that, directly or indirectly, contain a reference to themselves) may cause a recursive loop b) because deep copy copies *everything* it may copy too much, e.g. administrative data structures that should be shared even between copies Python's deep copy operation avoids these problems by: a) keeping a table of objects already copied during the current copying pass b) letting user-defined classes override the copying operation or the set of components copied This version does not copy types like module, class, function, method, nor stack trace, stack frame, nor file, socket, window, nor any similar types. Classes can use the same interfaces to control copying that they use to control pickling: they can define methods called __getinitargs__(), __getstate__() and __setstate__(). See the documentation for module "pickle" for information on these methods. """ import types import weakref from copyreg import dispatch_table class Error(Exception): pass error = Error # backward compatibility try: from org.python.core import PyStringMap except ImportError: PyStringMap = None __all__ = ["Error", "copy", "deepcopy"] def copy(x): """Shallow copy operation on arbitrary Python objects. See the module's __doc__ string for more info. """ cls = type(x) copier = _copy_dispatch.get(cls) if copier: return copier(x) if issubclass(cls, type): # treat it as a regular class: return _copy_immutable(x) copier = getattr(cls, "__copy__", None) if copier is not None: return copier(x) reductor = dispatch_table.get(cls) if reductor is not None: rv = reductor(x) else: reductor = getattr(x, "__reduce_ex__", None) if reductor is not None: rv = reductor(4) else: reductor = getattr(x, "__reduce__", None) if reductor: rv = reductor() else: raise Error("un(shallow)copyable object of type %s" % cls) if isinstance(rv, str): return x return _reconstruct(x, None, *rv) _copy_dispatch = d = {} def _copy_immutable(x): return x for t in (type(None), int, float, bool, complex, str, tuple, bytes, frozenset, type, range, slice, property, types.BuiltinFunctionType, type(Ellipsis), type(NotImplemented), types.FunctionType, weakref.ref): d[t] = _copy_immutable t = getattr(types, "CodeType", None) if t is not None: d[t] = _copy_immutable d[list] = list.copy d[dict] = dict.copy d[set] = set.copy d[bytearray] = bytearray.copy if PyStringMap is not None: d[PyStringMap] = PyStringMap.copy del d, t def deepcopy(x, memo=None, _nil=[]): """Deep copy operation on arbitrary Python objects. See the module's __doc__ string for more info. """ if memo is None: memo = {} d = id(x) y = memo.get(d, _nil) if y is not _nil: return y cls = type(x) copier = _deepcopy_dispatch.get(cls) if copier is not None: y = copier(x, memo) else: if issubclass(cls, type): y = _deepcopy_atomic(x, memo) else: copier = getattr(x, "__deepcopy__", None) if copier is not None: y = copier(memo) else: reductor = dispatch_table.get(cls) if reductor: rv = reductor(x) else: reductor = getattr(x, "__reduce_ex__", None) if reductor is not None: rv = reductor(4) else: reductor = getattr(x, "__reduce__", None) if reductor: rv = reductor() else: raise Error( "un(deep)copyable object of type %s" % cls) if isinstance(rv, str): y = x else: y = _reconstruct(x, memo, *rv) # If is its own copy, don't memoize. if y is not x: memo[d] = y _keep_alive(x, memo) # Make sure x lives at least as long as d return y _deepcopy_dispatch = d = {} def _deepcopy_atomic(x, memo): return x d[type(None)] = _deepcopy_atomic d[type(Ellipsis)] = _deepcopy_atomic d[type(NotImplemented)] = _deepcopy_atomic d[int] = _deepcopy_atomic d[float] = _deepcopy_atomic d[bool] = _deepcopy_atomic d[complex] = _deepcopy_atomic d[bytes] = _deepcopy_atomic d[str] = _deepcopy_atomic d[types.CodeType] = _deepcopy_atomic d[type] = _deepcopy_atomic d[types.BuiltinFunctionType] = _deepcopy_atomic d[types.FunctionType] = _deepcopy_atomic d[weakref.ref] = _deepcopy_atomic d[property] = _deepcopy_atomic def _deepcopy_list(x, memo, deepcopy=deepcopy): y = [] memo[id(x)] = y append = y.append for a in x: append(deepcopy(a, memo)) return y d[list] = _deepcopy_list def _deepcopy_tuple(x, memo, deepcopy=deepcopy): y = [deepcopy(a, memo) for a in x] # We're not going to put the tuple in the memo, but it's still important we # check for it, in case the tuple contains recursive mutable structures. try: return memo[id(x)] except KeyError: pass for k, j in zip(x, y): if k is not j: y = tuple(y) break else: y = x return y d[tuple] = _deepcopy_tuple def _deepcopy_dict(x, memo, deepcopy=deepcopy): y = {} memo[id(x)] = y for key, value in x.items(): y[deepcopy(key, memo)] = deepcopy(value, memo) return y d[dict] = _deepcopy_dict if PyStringMap is not None: d[PyStringMap] = _deepcopy_dict def _deepcopy_method(x, memo): # Copy instance methods return type(x)(x.__func__, deepcopy(x.__self__, memo)) d[types.MethodType] = _deepcopy_method del d def _keep_alive(x, memo): """Keeps a reference to the object x in the memo. Because we remember objects by their id, we have to assure that possibly temporary objects are kept alive by referencing them. We store a reference at the id of the memo, which should normally not be used unless someone tries to deepcopy the memo itself... """ try: memo[id(memo)].append(x) except KeyError: # aha, this is the first one :-) memo[id(memo)]=[x] def _reconstruct(x, memo, func, args, state=None, listiter=None, dictiter=None, deepcopy=deepcopy): deep = memo is not None if deep and args: args = (deepcopy(arg, memo) for arg in args) y = func(*args) if deep: memo[id(x)] = y if state is not None: if deep: state = deepcopy(state, memo) if hasattr(y, '__setstate__'): y.__setstate__(state) else: if isinstance(state, tuple) and len(state) == 2: state, slotstate = state else: slotstate = None if state is not None: y.__dict__.update(state) if slotstate is not None: for key, value in slotstate.items(): setattr(y, key, value) if listiter is not None: if deep: for item in listiter: item = deepcopy(item, memo) y.append(item) else: for item in listiter: y.append(item) if dictiter is not None: if deep: for key, value in dictiter: key = deepcopy(key, memo) value = deepcopy(value, memo) y[key] = value else: for key, value in dictiter: y[key] = value return y del types, weakref, PyStringMap