Python deepCopy是否复制从旧词典中删除后留下的空间?

Python deepCopy是否复制从旧词典中删除后留下的空间?,python,dictionary,Python,Dictionary,我正在尝试根据从字典中删除键。后者提出的一个解决方案是: 通过复制旧词典创建新词典的步骤 在源代码1中,我做了以下操作: 我创建了一个新字典new\u flights 删除键del flights[键] 最后使用new\u flights=copy.deepcopy(flights) 在源代码2中,我做了以下工作: 我创建了一个新字典new\u flights 复制到新字典new\u flights[key]=flights[key] 最后flights.clear() 两种方法都不起

我正在尝试根据从字典中删除键。后者提出的一个解决方案是:

通过复制旧词典创建新词典的步骤


在源代码1中,我做了以下操作:

  • 我创建了一个新字典
    new\u flights
  • 删除键
    del flights[键]
  • 最后使用
    new\u flights=copy.deepcopy(flights)
在源代码2中,我做了以下工作:

  • 我创建了一个新字典
    new\u flights
  • 复制到新字典
    new\u flights[key]=flights[key]
  • 最后
    flights.clear()
两种方法都不起作用。内存没有被释放


源代码1
源代码2
讨论后的源代码 基于这些评论,我做了以下操作,并使用deepcopy删除了引用。看来它起作用了。这是对的吗

def remove_old_departure_dates(flights, search_date):
    old_flights = defaultdict(lambda : defaultdict(list))
    new_flights = defaultdict(lambda : defaultdict(list))
    s_date = datetime.strptime(search_date,'%m/%d/%y')
    
    for key in flights.keys():
        dep_date = datetime.strptime(key.DDATE,'%m/%d/%y')
        if(s_date > dep_date):
            print "removing dates " + key.DDATE +" "+search_date
            old_flights[key] = copy.deepcopy(flights[key])
        else:
            new_flights[key] = copy.deepcopy(flights[key])

    return (old_flights, new_flights)

我知道我在问题中提到它作为参考。我实际应用了这个解决方案。但是还是不行。你读了你链接的问题的答案了吗?执行
flights.clear()
会清空字典,但字典不会向下调整大小。现在有了一个非常大的哈希表,其中包含虚拟条目。相反,制作一份副本,并将其重新分配给名称,确保没有对旧词典的引用,以便旧词典被垃圾收集。此外,正如这个问题所指出的,Python进程可能不会将释放的内存返回给操作系统。什么不起作用?你怎么知道的?到底是什么问题?你只是说“两种方法都不起作用”,但这不是一个足够的问题说明。你怎么知道?你用什么来监控你的记忆?你使用什么样的系统?窗户?OSX?Linux?再一次。你需要在问题本身中提供这些细节。如问题中所述,一些操作系统没有“看到”从Python进程中释放内存,即使内存实际上已被释放。
x=[1,2,3]
,然后
delx
。但这并不意味着如果您在代码中的其他地方执行了
y=x
,那么
y
将被删除。只要在某个地方有引用,基本列表将继续存在。我知道我在问题中提到它作为引用。我实际应用了这个解决方案。但是还是不行。你读了你链接的问题的答案了吗?执行
flights.clear()
会清空字典,但字典不会向下调整大小。现在有了一个非常大的哈希表,其中包含虚拟条目。相反,制作一份副本,并将其重新分配给名称,确保没有对旧词典的引用,以便旧词典被垃圾收集。此外,正如这个问题所指出的,Python进程可能不会将释放的内存返回给操作系统。什么不起作用?你怎么知道的?到底是什么问题?你只是说“两种方法都不起作用”,但这不是一个足够的问题说明。你怎么知道?你用什么来监控你的记忆?你使用什么样的系统?窗户?OSX?Linux?再一次。你需要在问题本身中提供这些细节。如问题中所述,一些操作系统没有“看到”从Python进程中释放内存,即使内存实际上已被释放。
x=[1,2,3]
,然后
delx
。但这并不意味着如果您在代码中的其他地方执行了
y=x
,那么
y
将被删除。只要在某个地方有对它的引用,基础列表就会继续存在。
def remove_old_departure_dates(flights, search_date):
    new_flights = defaultdict(lambda : defaultdict(list))
    s_date = datetime.strptime(search_date,'%m/%d/%y')
    
    for key in flights.keys():
        dep_date = datetime.strptime(key.DDATE,'%m/%d/%y')
        if(s_date > dep_date):
            new_flights[key] = flights[key]

    flights.clear()
    return new_flights
def remove_old_departure_dates(flights, search_date):
    old_flights = defaultdict(lambda : defaultdict(list))
    new_flights = defaultdict(lambda : defaultdict(list))
    s_date = datetime.strptime(search_date,'%m/%d/%y')
    
    for key in flights.keys():
        dep_date = datetime.strptime(key.DDATE,'%m/%d/%y')
        if(s_date > dep_date):
            print "removing dates " + key.DDATE +" "+search_date
            old_flights[key] = copy.deepcopy(flights[key])
        else:
            new_flights[key] = copy.deepcopy(flights[key])

    return (old_flights, new_flights)