私はc-エクステンションを作成しており、pytestでテストしたいと考えています。c-エクステンションをデバッグするためのPythonリファレンスカウントの理解
私がテストしていることの一部は、参照カウントが自分のオブジェクト上で正しいかどうかです。従って、私は私が手Ipythonから私を困惑純粋なPythonで小さなテスト...
を構築:
In [1]: x = 153513514215
In [2]: import sys
In [3]: sys.getrefcount(x)
Out[3]: 2
ので、発信者からの割り当てと1からとても良い、1つの参照運賃。私は、通常のPythonスクリプト
$ python3 stackoverflow_test.py
x refcount = 4
y refcount = 4
なぜ4なく2としてそれを実行すると、次のスクリプト(stackoverflow_test.py)は、以下の結果
import sys
def test_ref_count_int():
x = 677461248192962146784178
assert sys.getrefcount(x) == 2
def test_ref_count_str():
y = 'very long and probbably very unique string'
assert sys.getrefcount(y) == 2
def normal_te_st():
x = 222677461248192962146784178
y = '!!!!very long and probbably unique string!!!!'
print ('x refcount = {}'.format(sys.getrefcount(x)))
print ('y refcount = {}'.format(sys.getrefcount(y)))
if __name__ == '__main__':
normal_te_st()
を与えるしかし
?。
私はpytest
$ python3 -m pytest stackoverflow_test.py
=================== test session starts ===================
platform linux -- Python 3.4.3, pytest-3.0.7, py-1.4.33, pluggy-0.4.0
rootdir: /opt/projects/0001_Intomics/00005_TextMining/jcr/textmining/tests, inifile:
collected 2 items
stackoverflow_test.py FF
======================== FAILURES =========================
___________________ test_ref_count_int ____________________
def test_ref_count_int():
x = 677461248192962146784178
> assert sys.getrefcount(x) == 2
E assert 3 == 2
E + where 3 = <built-in function getrefcount>(677461248192962146784178)
E + where <built-in function getrefcount> = sys.getrefcount
stackoverflow_test.py:7: AssertionError
___________________ test_ref_count_str ____________________
def test_ref_count_str():
y = 'very long and probbably very unique string'
> assert sys.getrefcount(y) == 2
E AssertionError: assert 3 == 2
E + where 3 = <built-in function getrefcount>('very long and probbably very unique string')
E + where <built-in function getrefcount> = sys.getrefcount
stackoverflow_test.py:11: AssertionError
なぜ3及びません2でそれを実行しますか?
質問:どのように来ること
- のpython = 4 refは
- pytest = 3 refは
- セッションipython = 2 refが
をカウントし、私はそれを期待をカウントを数えますすべての3つのケースでipythonのように振舞い、誰が何が起こっているのかを説明し、私が作成しているオブジェクトを最もよくテストするためのヒントをいくつか与えることができます。
参考に感謝します。私はそれを噛む必要がありますが、この答えは私が望んでいたものでした... – jcr