python에서 두 변수가 동일한 개체를 참조하는지 비교
두 변수가 동일한 개체를 참조하는지 확인하는 방법은?
x = ['a', 'b', 'c']
y = x # x and y reference the same object
z = ['a', 'b', 'c'] # x and z reference different objects
그래서 그런 거지.
예를 들어,x is y
돌아온다True
왜냐하면 그것은 그 동안 같은 물체이기 때문입니다.x is z
돌아온다False
서로 다른 개체(동일한 데이터를 보유하는 경우)이기 때문입니다.
두 가지 해결책이 맞는 동안x is z
그리고.id(x) == id(z)
이미 게시되어 있습니다, python의 구현 세부 사항을 지적하고 싶습니다.Python은 정수를 객체로 저장하며, 최적화를 위해 시작할 때(-5~256) 작은 정수를 많이 생성하고 작은 값을 가진 정수를 포함하는 모든 변수를 이러한 미리 초기화된 객체로 포인팅합니다.추가 정보
즉, 같은 작은 숫자(-5 ~ 256)로 초기화된 정수 개체의 경우 두 개체가 동일한지 확인하면 true로 반환됩니다(ON C-Pyhon, 제가 알기로는 이것이 구현 세부 사항입니다). 큰 숫자의 경우 한 개체가 다른 개체에서 초기화된 경우에만 true로 반환됩니다.
> i = 13
> j = 13
> i is j
True
> a = 280
> b = 280
> a is b
False
> a = b
> a
280
> a is b
True
id()를 사용하여 각 변수 이름이 참조하는 고유 개체를 확인할 수도 있습니다.
In [1]: x1, x2 = 'foo', 'foo'
In [2]: x1 == x2
Out[2]: True
In [3]: id(x1), id(x2)
Out[3]: (4509849040, 4509849040)
In [4]: x2 = 'foobar'[0:3]
In [5]: x2
Out[5]: 'foo'
In [6]: x1 == x2
Out[6]: True
In [7]: x1 is x2
Out[7]: False
In [8]: id(x1), id(x2)
Out[8]: (4509849040, 4526514944)
y is x
될 것이다True
,y is z
될 것이다False
.
이것은 문서에서 가져온 것입니다.python.org : "모든 개체는 동일성, 유형 및 값을 가집니다.한 번 생성된 개체의 ID는 변경되지 않으며, 개체를 메모리에 저장된 개체의 주소로 생각할 수도 있습니다.'is' 연산자는 두 개체의 ID를 비교합니다. id() 함수는 자신의 ID를 나타내는 정수를 반환합니다."
값을 변경할 때마다 개체가 ID 변경에 따라 다시 생성되는 것으로 보입니다.x=3 선 다음 x=3.14 선은 오차를 주지 않으며 x에 대한 다양한 ID, 유형 및 값을 제공합니다.
저는 시각적 피드백을 정말 좋아합니다. 그래서 가끔 http://www.pythontutor.com/visualize.html#mode=edit 을 열어 메모리가 어떻게 할당되는지, 무엇이 무엇을 참조하는지 확인합니다.
이 답장은 시각화에 관한 것이라 멋진 gif를 추가했습니다..
언급URL : https://stackoverflow.com/questions/5445080/compare-if-two-variables-reference-the-same-object-in-python
'source' 카테고리의 다른 글
2-D 배열 앨리어싱 시 예기치 않은 스트렐렌 최적화 (0) | 2023.11.01 |
---|---|
조건문과 3항 연산자를 사용하지 않고 C에서 최대 3개의 숫자 찾기 (0) | 2023.11.01 |
Angular 2는 템플릿 기반 형식으로 입력할 수 없습니다. (0) | 2023.11.01 |
오류: 작업 ':app:clean'에 대해 실행에 실패했습니다.파일을삭제할수없습니다. (0) | 2023.11.01 |
Wordpress 정의('COOKIE_DOMAIN', 잘못된) 의미 (0) | 2023.11.01 |