python - 在python中重新分配变量时如何主动释放/删除所有关联对象
问题描述
重新分配变量时,python 似乎不会删除关联的对象。看看下面的代码:
from dataclasses import dataclass
@dataclass
class Transaction(object):
amount : int
new_balance : int
description : str
class Account(object):
def __init__(self, acc_name, balance, transactions = []):
self._acc_name = acc_name
self._balance = balance
self._transactions = transactions # list of Transaction objects
def add_income(self, amount, description = "income"):
self._balance += amount
self.transactions.append(Transaction(
amount=amount,
new_balance=self._balance,
description=description
))
@property
def transactions(self):
return self._transactions
acc = Account("User",100)
acc.add_income(100)
print(acc.transactions)
acc = None
acc = Account("User",100)
print(acc.transactions)
输出是
[Transaction(amount=100, new_balance=200, description='income')]
[Transaction(amount=100, new_balance=200, description='income')]
因此,即使我重新分配了变量,我们也可以看到 Transaction 对象仍然存在。在遇到这种行为时,当我想在 unittest 的 setUp 方法中为我的测试创建一个新实例时。为什么会这样?删除“父”对象时是否有可能删除“子”对象?在这种情况下,最佳做法是什么?
解决方案
问题在于默认值transactions
; 它在类的所有实例之间共享。
通常的成语是
def __init__(..., transactions=None) :
if transactions is None:
transactions = []
...
推荐阅读
- php - 用于回显数组结果的简单 PHP 函数,不显示所有行
- reactjs - React 测试库/React 路由器
- node.js - Docker 镜像中的 Heroku Buildpacks
- c++ - 如何在 Windows 上为 Tensorflow 构建和使用 C++ API
- python - (Discord.py)如何让机器人在一段时间后删除自己的消息?
- python - 运行代码返回“color must int or tuple”
- python - 如何连接从api下载的json文件?
- python - 给定尺寸,枕头没有绘制正确的边界框
- javascript - 让 HTML Canvas 生成 PDF 就绪的线条艺术?
- javascript - Babel 期望“,”应该有一个“。”?