0
호기심 만 .. python의 "변수"는 객체에 대한 참조입니다. 각각 이라는 이름이 또는 "액세서 레이블"이므로 스크립팅 중에 참조 할 수 있습니다.동일한 객체를 가리키는 모든 변수 (참조 이름) 검색
각 파이썬 개체가 자신을 지칭하는 모든 "변수 이름"의 목록을 유지합니까? 어떻게 접근합니까?
# A random object
class A(object):
pass
# references to instances
a = A()
b = A()
c = a
# I happen to come accross one reference
ref = c
# This is how I find all the ways I can access it
# i.e. all its "accessers" or "variable names"
k, v = None, None # to avoid `RuntimeError: dictionary changed size..`
for k, v in globals().items():
if v is ref:
print(k) # prints "a c ref" since `a is c` and `c is ref`
# Is there a way I may get this without looping over all variables? Like a..
ref.__getallreferencenames__() # AttributeError
# Is that information stored and kept up to date somewhere?
하나 실제 객체입니다 주어진 힙, 어떻게 그것에 연결된 모든 varnames 및 해당 범위를 얻을 수 있습니까? 'gc.get_referrers (ref) '를 사용하면 예상 한'['a ','c ','ref ']'보다 훨씬 많은 것을 얻을 수 있습니다. –
네, 훨씬 더 많기 때문에)'gc.get_referrers (ref)'는 범위가 일반적으로 특정 코드 객체의 런타임에만 사용 가능하기 때문에'object -> scope' 관계가 아닌 객체의 목록을 제공합니다 프레임 객체에 바인딩 됨). 즉, 사물과 범위는 완전히 다른 짐승입니다. 반면에 범위를 매핑으로 지정하면 객체를 찾을 수는 있지만 런타임에 존재하기 때문에이 범위를 먼저 제공해야합니다. –