Hi, I was recently reading the source code about CPython unittest, and I found the following code in import_help.py:
class DirsOnSysPath(object):
"""Context manager to temporarily add directories to sys.path.
...
"""
def __init__(self, *paths):
self.original_value = sys.path[:]
self.original_object = sys.path # is this redundant?
sys.path.extend(paths)
def __enter__(self):
return self
def __exit__(self, *ignore_exc):
sys.path = self.original_object
sys.path[:] = self.original_value
Here is a class for testing Tools and scripts, it can temporarily add the package directory to sys.path
, and restore sys.path
after the test is completed.
IMO, self.original_object = sys.path
seems to be redundant.
Here, sys.path
is shallow copied to self.original_object
, and self.original_object
is assigned to sys.path
at the end. extend
will not change the id
of the list object, and it seems that the two are one object from beginning to end.
It seems that we could only keep the slice of sys.path
(sys.path[:]
), and copying and assigning it can achieve the goal.
Maybe there is some background about the code, can someone tell me please.