Pythonの古典的なインタビューの質問2

1. Pythonのガベージコレクションメカニズム(ガベージコレクション)について簡単に説明してください
Pythonのガベージコレクションは、参照カウントに基づいており、** mark-clear 世代別コレクション**が追加されています。

•参照カウント:Pythonは、各オブジェクトの参照カウントをメモリに保存します。カウントが0になると、オブジェクトは消え、オブジェクトに割り当てられたメモリが解放されます。 •マーククリア:list、dict、tuple、instanceなどの一部のコンテナオブジェクトには参照サイクルがある場合があります。これらのサイクルでは、ガベージコレクターはこれらのサイクルを定期的にリサイクルします(オブジェクトは参照(ポインター)によって接続されて形成されます)有向グラフでは、オブジェクトがこの有向グラフのノードを形成し、参照関係がこの有向グラフのエッジを形成します)。 •世代別コレクション:Pythonは、オブジェクトの存続期間に応じてメモリを3つの世代に分割します。オブジェクトが作成された後、ガベージコレクターはそれらが属する世代を割り当てます。各オブジェクトには世代が割り当てられ、若い世代には優先順位が割り当てられるため、後で作成されたオブジェクトはリサイクルしやすくなります。

**2. オブジェクト指向のnewとinitの違いを簡単に説明してください。 **

1、__ new__現在のクラスを表すパラメーターclsが少なくとも1つ必要です。このパラメーターは、インスタンス化されるとPythonインタープリターによって自動的に認識されます。
2、__ new__戻り値が必要です。インスタンス化されたインスタンスを返します。これは自分で行います。__new__親クラスをいつ返すことができるかに特に注意してください(スーパー経由)(現在のクラス名, cls))__new__インスタンス外、または直接オブジェクト__new__出てくる例。
3、__ init__これはパラメータselfがあります__new__返されたインスタンス、__init__に__new__他のいくつかの初期化アクションは、に基づいて完了することができます__init__戻り値は必要ありません。
4、 万一に備えて__new__現在のクラスのインスタンスを作成します。自動的に呼び出されます__init__returnステートメントによって呼び出される関数__new__函数的第一个参数是 cls 来保证是当前类实例,万一に備えて是其他类的类名,;那么实际创建返回的就是其他类的实例,其实就不会调用当前类的__init__関数、それは他のタイプを呼び出さない__init__関数。

**3. Pythonで可変データタイプと不変データタイプを一覧表示するのはなぜですか? **

1、 可変データタイプ:list、dict、set 2.不変データタイプ:int / float、str、tuple原理:可変データタイプはメモリスペースアドレスを共有し、不変データタイプは各オブジェクトが1つを生成することを意味しますメモリアドレス。

**4. python ** ####で2つの値を交換します

a,b=1,2
a,b=b,a

5. バグへの対処方法

•単純で、直接的で、失礼で効果的なのは、print()を使用して、問題となる可能性のある変数を出力することです。 •print()を使用して表示を支援する場合は、代わりにassertを使用できます。 •print()をloggingに置き換えることは、3番目の方法です。assertと比較して、loggingはエラーをスローせず、ファイルに出力できます。 •pythonデバッガーpdbを起動し、プログラムをシングルステップモードで実行します。実行ステータスはいつでも確認できます。

**6. popとdelを使用して、辞書の「name」フィールドを削除します。dic= {"name": "zs"、 "age":18} **

dic ={"name":"zs","age":18}
dic.pop('name')
del dic['age']print(dic)

7. いくつかの魔法の方法をリストし、それらの使用法を簡単に紹介します

__ init__:オブジェクト初期化メソッド
__ new__:オブジェクトの作成時に実行されるメソッド、単一列モードが使用されます
__ str__:印刷出力オブジェクトを使用する場合、自分で定義する限り__str__(self)メソッド、次にこのメソッドから返されたデータを出力します
__ del__:オブジェクト実行を削除する方法

8. リストをソートするためのソートとソートの違いを説明してください

•sort()とsorted()の違いは、sorted()が新しいリストを生成するのに対し、sortはリストをその場で再配置することです。 •sorted(L)は、元のLを変更せずにソートされたLを返します。L.sort()は元のLを操作します。呼び出し後、元のLは戻り値なしで変更されます。したがって、a = a.sort( ) 間違っている! a = sorted(a)は正しいです。 •sorted()は任意の反復可能なコンテナに適しており、list.sort()はlistのみをサポートし(それ自体はlistのメソッドです)、sortedはlist.sort()よりも頻繁に使用されるため、Pythonでのより高度な並べ替え手法sort()でデモンストレーションします

9. Python辞書とjson文字列変換方法

import json
 dic ={"name":"zs"}
 res = json.dumps(dic)print(res,type(res))
 ret = json.loads(res)print(ret,type(ret))

**10、 isと==の違いは? **

is:両側のメモリアドレスが等しいかどうかを比較します。2つの参照が同じオブジェクトを指しているかどうかを比較します(参照比較)

== :両側の値が等しいかどうかを比較します。

 a =[1,2,3]
 b = a
 print(a is b)print(a == b)

 c = copy.deepcopy(a)print(a is c)print(a == c)-------------
 True
 True
 False
 True

Recommended Posts

Pythonの古典的なインタビューの質問2
Pythonインタビューの質問
Pythonインタビューの質問の概要
Pythonの古典的なインタビューの質問1
Pythonインタビューの質問:文字列の連結
Pythonインタビュー質問コレクション(3)
Pythonの古典的なプログラミングの質問:文字列の置換
Pythonは質問に答えます
Pythonの古典的なアルゴリズム
Pythonインタビュー攻撃
Leetcode2は2つの数字を追加しますPython
Pythonの基本的な描画チュートリアル(2つ)
LeetCodeブラシ質問の概要python3
Pythonは10の古典的なソートアルゴリズムを実装しています