python清除实例化类_python – 实例化类保留引用

在Python中,我实例化一个类两次并将它们存储到2个不同的变量中.为什么第二个对象包含第一个对象的副本?我知道这是一个副本,因为我更改了一个对象中的值而它没有改变另一个对象.例:

我有以下课程:

class HistoricalData:

dataPoints = {}

然后我实例化该类并使用值填充dataPoints:

hd1 = HistoricalData()

hd1.dataPoints["channel1"] = 1

hd1.dataPoints["channel2"] = 2

hd1.dataPoints["channel3"] = 3

然后我再次实例化该类并再次使用值填充它:

hd2 = HistoricalData()

hd2.dataPoints["channel1"] = 10

当我从hd1.dataPoints和hd2.dataPoints打印值时,我得到以下内容:

{'channel1': 1, 'channel2': 2, 'channel3': 3}

{'channel1': 10, 'channel2': 2, 'channel3': 3}

字典具有第二个对象中第一个的副本,因为channel1中的值在第二个而不是第一个中更改.

我想当你实例化一个类时,所有的值都将默认为类中定义的值.我错过了什么吗?

解决方法:

类变量在类的所有实例之间共享.这意味着当您更新一个HistoricalData对象时,您将全部更新它们.

实例变量是类的每个实例的本地变量.这些通常在__init__()特殊方法中初始化,该方法在创建每个实例时调用.

因此,您可能应该像这样初始化数据点以获得您想要的结果:

class HistoricalData(object):

def __init__(self):

self.dataPoints = {}

标签:python,object,reference,class

来源: https://codeday.me/bug/20190721/1494993.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值