我是否在此处复制了 class 实例或 class 处理程序?

Did I copy the class instance or the class handler here?

我想按 class 个属性对 class 个处理程序进行排序。 首先我生成一个 class 处理程序列表,以下 5 行在 while 循环中处理。

# here a serial no was entered and validity checked
if snr_ok == True:
    device_list.append(Device(snr, prop_list))
    logging.info ("Added serial number " + snr + " with properties " + prop_list)
else: 
    pass
    
    """Group all instances of by property (which is a gas type)"""    
    calibration_gases = {'He':[], 'O2':[], 'N':[], 'Ar':[]}                    
    for gas in list(calibration_gases):
        for dev in device_list:
            if gas in dev.get_gaslist(): # get_gaslist returns a list of strings with some of the gases
                calibration_gases[gas].**append(dev)**
    print (calibration_gases)

通过按气体类型对 dev 元素进行分组,我将它们添加到 calibration_gases 字典中。 我的问题是: dev 是 class 实例的副本还是 class 处理程序的副本? 或者用 C 说:Is dev a pointer to the class instance or is it a copy of the class itself?

都没有。 Python 没有 call-by-value/call-by-reference 区别,而是使用 call-by-object-identity 范例。除非你明确地复制某些东西(例如使用切片,obj.copy()copy.deepcopy),否则它不会发生。

添加到 calibration_gases[gas] 的内容 是可以在 device_list.

中找到的同一对象

顺便说一下,您可以简单地 for gas in calibration_gases: 而不是 for gas in list(calibration_gases):。更好的是,您可以这样做:

for gas, devices in calibration_gases.items():
    for dev in device_list:
        if gas in dev.get_gaslist():
            devices.append(dev)