python - python中两个名字指向同一个对象
问题描述
考虑以下示例:
class Test:
def __init__(self, lis: list):
self.list = lis
lis = [1, 2, 3]
obj1 = Test(lis)
obj2 = Test(lis)
print(obj1 is obj2)
print(obj1.list is obj2.list)
obj1.list.reverse()
print(obj2.list)
输出 :
False
True
[3, 2, 1]
说明:
我创建了同一个类的 2 个对象,每个对象的“列表”是[1, 2, 3]
. 测试 names是否引用同一个对象,答案是否定的 (False) obj1
。obj2
但是当我测试 if 时obj1.list is obj2.list
,我们得到 ' True
' 作为答案。因此,当我反转名称列表时obj1
,该列表也反转了名称obj2
,因为它是两个名称的相同列表。
我需要的是一种反转列表的方法obj1
,但不是obj2
。所以我需要创建一个新列表。
最后,这将是结果:
obj1.list.reverse()
print(obj2.list)
预期输出:
[1, 2, 3]
解决方案
您正在存储对 list in 的相同引用self.list
,您可以通过制作副本来避免这种情况:
class Test:
def __init__(self, lis: list):
self.list = lis[:]
将其视为指针。因此,当您修改一个时,指向相同值的另一个也会更改。
推荐阅读
- c++ - 使用指针将一个数组的元素复制到另一个数组的函数
- html - CSS 变量:输入:焦点未设置变量
- python - 如何在 dask/streamz 任务中合并异步队列?
- html - 如何让我的导航栏在移动设备上不重叠
- python - 如何配置 Scrapy Shell 以使用 BeautifulSoup 解析器
- angular - 在 Angular 中显示 ByteArrayContent
- reactjs - 在 Netlify 或 Surge 上部署时,Gatsby 站点“找不到页面”
- python - 类似“%term%”搜索的算法
- java - 尝试使用 Python 从旧版软件解析文件(mmp 格式)
- machine-learning - 在 Ubuntu 18.04 中优化时 TPOT 冻结