[解決済み] 作成した変数や関数などをインタプリタのメモリから削除する方法はありますか?
質問
この質問に対する正確な答えを数日前から探しているのですが、なかなか良いものが見つかりません。私はプログラミングの完全な初心者ではありませんが、まだ中級者レベルでもありません。
Pythonのシェルの中にいるとき、私はタイプします。
dir()
と入力すると、現在のスコープ(メインブロック)にあるすべてのオブジェクトの名前が表示され、その数は6個です。
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
次に、変数を宣言するときに、例えば
x = 10
と宣言すると、自動的に組み込みモジュールの下にあるオブジェクトのリストに
dir()
と入力すると
dir()
と入力すると、表示されるようになりました。
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'x']
関数やクラスなども同様です。
最初にあった標準的な6つのオブジェクトを消さずに、これらの新しいオブジェクトをすべて削除するにはどうしたらよいでしょうか。
私はここで、コマンド プロンプト ウィンドウからすべてのテキストを消去する "memory cleaning" や "cleaning of the console" について読みました。
>>> import sys
>>> clear = lambda: os.system('cls')
>>> clear()
しかし、これらすべては私が達成しようとしていることとは何の関係もなく、使用されているすべてのオブジェクトをクリーンアップするわけではありません。
どのように解決するのですか?
個々の名前を削除するには
del
:
del x
から削除するか、あるいは
globals()
オブジェクトから削除することもできます。
for name in dir():
if not name.startswith('_'):
del globals()[name]
これは単なるループの例です。これは、アンダースコアで始まらない名前のみを防御的に削除し、インタープリタではアンダースコアで始まらない名前のみを使用したと(無理もない)仮定します。本当に徹底したいのであれば、ハードコードされた名前のリスト(ホワイトリスト)を代わりに使用することができます。インタープリタを終了して再起動する以外に、あなたのためにクリアを行う組み込みの関数はありません。
インポートしたモジュール (
import os
で参照されるため、インポートされたままとなります。
sys.modules
によって参照されるため、インポートされたままになります。その後のインポートでは、すでにインポートされたモジュールオブジェクトが再利用されます。ただ、現在のグローバルな名前空間では、それらへの参照を持つことはありません。
しかし、Pythonはメモリ上のデータについてどんなセキュリティ保証もしません。オブジェクトがもはや参照されないとき、インタプリタはもはや使用されていないとしてメモリをマークしますが、データへのアクセスを防ぐためにそのメモリを上書きする措置を取りません。もしそのレベルのセキュリティ保護が必要であれば、セキュリティを考慮して自身のメモリを管理するサードパーティの拡張機能を使用する必要があります。
関連
-
Python機械学習Githubが8.9Kstarsに達したモデルインタープリタLIME
-
Pythonによるjieba分割ライブラリ
-
Pythonの学習とデータマイニングのために知っておくべきターミナルコマンドのトップ10
-
Python LeNetネットワークの説明とpytorchでの実装
-
[解決済み】SyntaxError: デフォルト以外の引数がデフォルトの引数に続く
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac
-
[解決済み] リストの要素を値で削除する簡単な方法はありますか?
-
[解決済み] Pythonで現在のユーザー名を取得するポータブルな方法はありますか?
-
[解決済み] あるスクリプトを別のスクリプトから呼び出すには、どのような方法がありますか?
-
[解決済み】クラスメソッドの目的は何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python Decorator 練習問題
-
風力制御におけるKS原理を深く理解するためのpythonアルゴリズム
-
[解決済み】RuntimeWarning: invalid value encountered in double_scalars で numpy の除算ができない。
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】 NameError: グローバル名 'xrange' は Python 3 で定義されていません。
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み] 'int'オブジェクトに'__getitem__'属性がない。
-
[解決済み】「OverflowError: Python int too large to convert to C long" on windows but not mac
-
[解決済み] Pythonスクリプトの途中ですべての変数をクリアするにはどうすればよいですか?
-
[解決済み】pythonで変数をクリアする