How does Python know the values already stored in its memory? Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 23, 2019 at 00:00UTC (8:00pm US/Eastern) Data science time! April 2019 and salary with experience The Ask Question Wizard is Live!Which Python memory profiler is recommended?How can I safely create a nested directory in Python?How to return multiple values from a function?How do I parse a string to a float or int in Python?Does Python have a ternary conditional operator?Convert bytes to a string?How do I sort a dictionary by value?“Least Astonishment” and the Mutable Default ArgumentDoes Python have a string 'contains' substring method?Why is “1000000000000000 in range(1000000000000001)” so fast in Python 3?
If Windows 7 doesn't support WSL, then what does Linux subsystem option mean?
Find 108 by using 3,4,6
Why do we need to use the builder design pattern when we can do the same thing with setters?
Time to Settle Down!
Is a ledger board required if the side of my house is wood?
How were pictures turned from film to a big picture in a picture frame before digital scanning?
How to tell that you are a giant?
Question about debouncing - delay of state change
SF book about people trapped in a series of worlds they imagine
Trademark violation for app?
What is the topology associated with the algebras for the ultrafilter monad?
What is the appropriate index architecture when forced to implement IsDeleted (soft deletes)?
Do I really need to have a message in a novel to appeal to readers?
Crossing US/Canada Border for less than 24 hours
Should I use a zero-interest credit card for a large one-time purchase?
How would a mousetrap for use in space work?
Performance gap between vector<bool> and array
How could we fake a moon landing now?
Is it fair for a professor to grade us on the possession of past papers?
Central Vacuuming: Is it worth it, and how does it compare to normal vacuuming?
How to play a character with a disability or mental disorder without being offensive?
Drawing without replacement: why is the order of draw irrelevant?
Maximum summed subsequences with non-adjacent items
Why do we bend a book to keep it straight?
How does Python know the values already stored in its memory?
Announcing the arrival of Valued Associate #679: Cesar Manara
Planned maintenance scheduled April 23, 2019 at 00:00UTC (8:00pm US/Eastern)
Data science time! April 2019 and salary with experience
The Ask Question Wizard is Live!Which Python memory profiler is recommended?How can I safely create a nested directory in Python?How to return multiple values from a function?How do I parse a string to a float or int in Python?Does Python have a ternary conditional operator?Convert bytes to a string?How do I sort a dictionary by value?“Least Astonishment” and the Mutable Default ArgumentDoes Python have a string 'contains' substring method?Why is “1000000000000000 in range(1000000000000001)” so fast in Python 3?
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;
I want to know how Python knows (if it knows) that a value-type object is already stored in its memory (and also knows where it is).
For this code, when assigning the value 1
for b
, how does it know that the value 1
is already in its memory and stores its reference in b
?
>>> a = 1
>>> b = 1
>>> a is b
True
python python-3.x memory
New contributor
|
show 2 more comments
I want to know how Python knows (if it knows) that a value-type object is already stored in its memory (and also knows where it is).
For this code, when assigning the value 1
for b
, how does it know that the value 1
is already in its memory and stores its reference in b
?
>>> a = 1
>>> b = 1
>>> a is b
True
python python-3.x memory
New contributor
Useprint(hex(id(b)))
to check memory address forb
– Yusufsn
1 hour ago
>>> hex(id(b))'0x7ffe705ee350' >>> hex(id(a)) '0x7ffe705ee350'
– Just A Lone
1 hour ago
the values are the same
– Just A Lone
1 hour ago
1
If two variables refer to the same value between -5 and 256 (as opposed to use) then by definition there is only one object.
– Yusufsn
1 hour ago
1
@Yusufsn No. For bigger integers (>256) it's not true.
– ajnLJA-0184
1 hour ago
|
show 2 more comments
I want to know how Python knows (if it knows) that a value-type object is already stored in its memory (and also knows where it is).
For this code, when assigning the value 1
for b
, how does it know that the value 1
is already in its memory and stores its reference in b
?
>>> a = 1
>>> b = 1
>>> a is b
True
python python-3.x memory
New contributor
I want to know how Python knows (if it knows) that a value-type object is already stored in its memory (and also knows where it is).
For this code, when assigning the value 1
for b
, how does it know that the value 1
is already in its memory and stores its reference in b
?
>>> a = 1
>>> b = 1
>>> a is b
True
python python-3.x memory
python python-3.x memory
New contributor
New contributor
edited 37 mins ago
Mad Physicist
39k1682113
39k1682113
New contributor
asked 1 hour ago
Just A LoneJust A Lone
434
434
New contributor
New contributor
Useprint(hex(id(b)))
to check memory address forb
– Yusufsn
1 hour ago
>>> hex(id(b))'0x7ffe705ee350' >>> hex(id(a)) '0x7ffe705ee350'
– Just A Lone
1 hour ago
the values are the same
– Just A Lone
1 hour ago
1
If two variables refer to the same value between -5 and 256 (as opposed to use) then by definition there is only one object.
– Yusufsn
1 hour ago
1
@Yusufsn No. For bigger integers (>256) it's not true.
– ajnLJA-0184
1 hour ago
|
show 2 more comments
Useprint(hex(id(b)))
to check memory address forb
– Yusufsn
1 hour ago
>>> hex(id(b))'0x7ffe705ee350' >>> hex(id(a)) '0x7ffe705ee350'
– Just A Lone
1 hour ago
the values are the same
– Just A Lone
1 hour ago
1
If two variables refer to the same value between -5 and 256 (as opposed to use) then by definition there is only one object.
– Yusufsn
1 hour ago
1
@Yusufsn No. For bigger integers (>256) it's not true.
– ajnLJA-0184
1 hour ago
Use
print(hex(id(b)))
to check memory address for b
– Yusufsn
1 hour ago
Use
print(hex(id(b)))
to check memory address for b
– Yusufsn
1 hour ago
>>> hex(id(b))'0x7ffe705ee350' >>> hex(id(a)) '0x7ffe705ee350'
– Just A Lone
1 hour ago
>>> hex(id(b))'0x7ffe705ee350' >>> hex(id(a)) '0x7ffe705ee350'
– Just A Lone
1 hour ago
the values are the same
– Just A Lone
1 hour ago
the values are the same
– Just A Lone
1 hour ago
1
1
If two variables refer to the same value between -5 and 256 (as opposed to use) then by definition there is only one object.
– Yusufsn
1 hour ago
If two variables refer to the same value between -5 and 256 (as opposed to use) then by definition there is only one object.
– Yusufsn
1 hour ago
1
1
@Yusufsn No. For bigger integers (>256) it's not true.
– ajnLJA-0184
1 hour ago
@Yusufsn No. For bigger integers (>256) it's not true.
– ajnLJA-0184
1 hour ago
|
show 2 more comments
4 Answers
4
active
oldest
votes
Python uses shared small integers to help quick access. Integers range from [-5, 256] already exists in memory, so if you check the address, they are the same. However, for larger integers, it's not true.
a = 10e5
b = 10e5
a is b # False
Wait, what? If you check the address of the numbers, you'll find something interesting:
a = 1
b = 1
id(a) # 4463034512
id(b) # 4463034512
a = 257
b = 257
id(a) # 4642585200
id(b) # 4642585712
It's called integer cache. You can read more about the integer cache here: https://wsvincent.com/python-wat-integer-cache/
“The current implementation keeps an array of integer objects for all
integers between -5 and 256, when you create an int in that range you
actually just get back a reference to the existing object.”
Why? Because small integers are more frequently used by loops. Using reference to existing objects instead of creating a new object saves an overhead.
New contributor
add a comment |
If you take a look at Objects/longobject.c
, which implements the int
type for CPython, you will see that the numbers between -5 (NSMALLNEGINTS
) and 256 (NSMALLPOSINTS - 1
) are pre-allocated and cached. This is done to avoid the penalty of allocating multiple unnecessary objects for the most commonly used integers. This works because integers are immutable: you don't need multiple references to represent the same number.
add a comment |
Python doesn't know anything until you tell it. So in your code above, when you initialize a and b, you are storing those values(in the register or RAM), and calling the place to store it a and b, so that you can reference them later. If you didn't initialize the variable first, python would just give you an error.
New contributor
I think you're missing the point of the question.a == b
is obviously true. OP is asking whya is b
is true.
– Mad Physicist
1 hour ago
add a comment |
Why?
is
is kinda confusing:
@ajnLJA-0184 is correct, but additionally, strings work well too, but when you do some operations to it, but still the same strings, nope:
>>> a = 'python'
>>> b = 'python'
>>> a is b
True
>>> a = 'pytho' + 'n'
>>> b = 'pythonn'[:-1]
>>> a is b
False
>>>
But strange enough, it is different for integers:
>>> a = 1
>>> b = 1
>>> a is b
True
>>> a = 3*8
>>> b = 4*6
>>> a is b
True
>>>
But as the link he gave, there you can see that:
>>> a = 257
>>> b = 257
>>> a is b
False
>>>
How to know if it is gonna be True
or not?
Well, here is when id
comes in handy:
Here you go, just type in id
and two parens and say your varaible...:
>>> a = 1
>>> b = 1
>>> id(a)
1935522256
>>> id(b)
1935522256
>>> a = 257 # or -6
>>> b = 257 # or -6
>>> id(a)
935705330960
>>> id(b)
935705331216
>>>
1
Whyd is a
equals False in the first example? That's new.
– ajnLJA-0184
1 hour ago
@ajnLJA-0 Because the strings aren't direct like'python'
, they do an operation to get'python'
, that's why.
– U9-Forward
1 hour ago
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Just A Lone is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55756029%2fhow-does-python-know-the-values-already-stored-in-its-memory%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
4 Answers
4
active
oldest
votes
4 Answers
4
active
oldest
votes
active
oldest
votes
active
oldest
votes
Python uses shared small integers to help quick access. Integers range from [-5, 256] already exists in memory, so if you check the address, they are the same. However, for larger integers, it's not true.
a = 10e5
b = 10e5
a is b # False
Wait, what? If you check the address of the numbers, you'll find something interesting:
a = 1
b = 1
id(a) # 4463034512
id(b) # 4463034512
a = 257
b = 257
id(a) # 4642585200
id(b) # 4642585712
It's called integer cache. You can read more about the integer cache here: https://wsvincent.com/python-wat-integer-cache/
“The current implementation keeps an array of integer objects for all
integers between -5 and 256, when you create an int in that range you
actually just get back a reference to the existing object.”
Why? Because small integers are more frequently used by loops. Using reference to existing objects instead of creating a new object saves an overhead.
New contributor
add a comment |
Python uses shared small integers to help quick access. Integers range from [-5, 256] already exists in memory, so if you check the address, they are the same. However, for larger integers, it's not true.
a = 10e5
b = 10e5
a is b # False
Wait, what? If you check the address of the numbers, you'll find something interesting:
a = 1
b = 1
id(a) # 4463034512
id(b) # 4463034512
a = 257
b = 257
id(a) # 4642585200
id(b) # 4642585712
It's called integer cache. You can read more about the integer cache here: https://wsvincent.com/python-wat-integer-cache/
“The current implementation keeps an array of integer objects for all
integers between -5 and 256, when you create an int in that range you
actually just get back a reference to the existing object.”
Why? Because small integers are more frequently used by loops. Using reference to existing objects instead of creating a new object saves an overhead.
New contributor
add a comment |
Python uses shared small integers to help quick access. Integers range from [-5, 256] already exists in memory, so if you check the address, they are the same. However, for larger integers, it's not true.
a = 10e5
b = 10e5
a is b # False
Wait, what? If you check the address of the numbers, you'll find something interesting:
a = 1
b = 1
id(a) # 4463034512
id(b) # 4463034512
a = 257
b = 257
id(a) # 4642585200
id(b) # 4642585712
It's called integer cache. You can read more about the integer cache here: https://wsvincent.com/python-wat-integer-cache/
“The current implementation keeps an array of integer objects for all
integers between -5 and 256, when you create an int in that range you
actually just get back a reference to the existing object.”
Why? Because small integers are more frequently used by loops. Using reference to existing objects instead of creating a new object saves an overhead.
New contributor
Python uses shared small integers to help quick access. Integers range from [-5, 256] already exists in memory, so if you check the address, they are the same. However, for larger integers, it's not true.
a = 10e5
b = 10e5
a is b # False
Wait, what? If you check the address of the numbers, you'll find something interesting:
a = 1
b = 1
id(a) # 4463034512
id(b) # 4463034512
a = 257
b = 257
id(a) # 4642585200
id(b) # 4642585712
It's called integer cache. You can read more about the integer cache here: https://wsvincent.com/python-wat-integer-cache/
“The current implementation keeps an array of integer objects for all
integers between -5 and 256, when you create an int in that range you
actually just get back a reference to the existing object.”
Why? Because small integers are more frequently used by loops. Using reference to existing objects instead of creating a new object saves an overhead.
New contributor
edited 1 hour ago
New contributor
answered 1 hour ago
ajnLJA-0184ajnLJA-0184
2004
2004
New contributor
New contributor
add a comment |
add a comment |
If you take a look at Objects/longobject.c
, which implements the int
type for CPython, you will see that the numbers between -5 (NSMALLNEGINTS
) and 256 (NSMALLPOSINTS - 1
) are pre-allocated and cached. This is done to avoid the penalty of allocating multiple unnecessary objects for the most commonly used integers. This works because integers are immutable: you don't need multiple references to represent the same number.
add a comment |
If you take a look at Objects/longobject.c
, which implements the int
type for CPython, you will see that the numbers between -5 (NSMALLNEGINTS
) and 256 (NSMALLPOSINTS - 1
) are pre-allocated and cached. This is done to avoid the penalty of allocating multiple unnecessary objects for the most commonly used integers. This works because integers are immutable: you don't need multiple references to represent the same number.
add a comment |
If you take a look at Objects/longobject.c
, which implements the int
type for CPython, you will see that the numbers between -5 (NSMALLNEGINTS
) and 256 (NSMALLPOSINTS - 1
) are pre-allocated and cached. This is done to avoid the penalty of allocating multiple unnecessary objects for the most commonly used integers. This works because integers are immutable: you don't need multiple references to represent the same number.
If you take a look at Objects/longobject.c
, which implements the int
type for CPython, you will see that the numbers between -5 (NSMALLNEGINTS
) and 256 (NSMALLPOSINTS - 1
) are pre-allocated and cached. This is done to avoid the penalty of allocating multiple unnecessary objects for the most commonly used integers. This works because integers are immutable: you don't need multiple references to represent the same number.
answered 1 hour ago
Mad PhysicistMad Physicist
39k1682113
39k1682113
add a comment |
add a comment |
Python doesn't know anything until you tell it. So in your code above, when you initialize a and b, you are storing those values(in the register or RAM), and calling the place to store it a and b, so that you can reference them later. If you didn't initialize the variable first, python would just give you an error.
New contributor
I think you're missing the point of the question.a == b
is obviously true. OP is asking whya is b
is true.
– Mad Physicist
1 hour ago
add a comment |
Python doesn't know anything until you tell it. So in your code above, when you initialize a and b, you are storing those values(in the register or RAM), and calling the place to store it a and b, so that you can reference them later. If you didn't initialize the variable first, python would just give you an error.
New contributor
I think you're missing the point of the question.a == b
is obviously true. OP is asking whya is b
is true.
– Mad Physicist
1 hour ago
add a comment |
Python doesn't know anything until you tell it. So in your code above, when you initialize a and b, you are storing those values(in the register or RAM), and calling the place to store it a and b, so that you can reference them later. If you didn't initialize the variable first, python would just give you an error.
New contributor
Python doesn't know anything until you tell it. So in your code above, when you initialize a and b, you are storing those values(in the register or RAM), and calling the place to store it a and b, so that you can reference them later. If you didn't initialize the variable first, python would just give you an error.
New contributor
New contributor
answered 1 hour ago
Monster AR44Monster AR44
111
111
New contributor
New contributor
I think you're missing the point of the question.a == b
is obviously true. OP is asking whya is b
is true.
– Mad Physicist
1 hour ago
add a comment |
I think you're missing the point of the question.a == b
is obviously true. OP is asking whya is b
is true.
– Mad Physicist
1 hour ago
I think you're missing the point of the question.
a == b
is obviously true. OP is asking why a is b
is true.– Mad Physicist
1 hour ago
I think you're missing the point of the question.
a == b
is obviously true. OP is asking why a is b
is true.– Mad Physicist
1 hour ago
add a comment |
Why?
is
is kinda confusing:
@ajnLJA-0184 is correct, but additionally, strings work well too, but when you do some operations to it, but still the same strings, nope:
>>> a = 'python'
>>> b = 'python'
>>> a is b
True
>>> a = 'pytho' + 'n'
>>> b = 'pythonn'[:-1]
>>> a is b
False
>>>
But strange enough, it is different for integers:
>>> a = 1
>>> b = 1
>>> a is b
True
>>> a = 3*8
>>> b = 4*6
>>> a is b
True
>>>
But as the link he gave, there you can see that:
>>> a = 257
>>> b = 257
>>> a is b
False
>>>
How to know if it is gonna be True
or not?
Well, here is when id
comes in handy:
Here you go, just type in id
and two parens and say your varaible...:
>>> a = 1
>>> b = 1
>>> id(a)
1935522256
>>> id(b)
1935522256
>>> a = 257 # or -6
>>> b = 257 # or -6
>>> id(a)
935705330960
>>> id(b)
935705331216
>>>
1
Whyd is a
equals False in the first example? That's new.
– ajnLJA-0184
1 hour ago
@ajnLJA-0 Because the strings aren't direct like'python'
, they do an operation to get'python'
, that's why.
– U9-Forward
1 hour ago
add a comment |
Why?
is
is kinda confusing:
@ajnLJA-0184 is correct, but additionally, strings work well too, but when you do some operations to it, but still the same strings, nope:
>>> a = 'python'
>>> b = 'python'
>>> a is b
True
>>> a = 'pytho' + 'n'
>>> b = 'pythonn'[:-1]
>>> a is b
False
>>>
But strange enough, it is different for integers:
>>> a = 1
>>> b = 1
>>> a is b
True
>>> a = 3*8
>>> b = 4*6
>>> a is b
True
>>>
But as the link he gave, there you can see that:
>>> a = 257
>>> b = 257
>>> a is b
False
>>>
How to know if it is gonna be True
or not?
Well, here is when id
comes in handy:
Here you go, just type in id
and two parens and say your varaible...:
>>> a = 1
>>> b = 1
>>> id(a)
1935522256
>>> id(b)
1935522256
>>> a = 257 # or -6
>>> b = 257 # or -6
>>> id(a)
935705330960
>>> id(b)
935705331216
>>>
1
Whyd is a
equals False in the first example? That's new.
– ajnLJA-0184
1 hour ago
@ajnLJA-0 Because the strings aren't direct like'python'
, they do an operation to get'python'
, that's why.
– U9-Forward
1 hour ago
add a comment |
Why?
is
is kinda confusing:
@ajnLJA-0184 is correct, but additionally, strings work well too, but when you do some operations to it, but still the same strings, nope:
>>> a = 'python'
>>> b = 'python'
>>> a is b
True
>>> a = 'pytho' + 'n'
>>> b = 'pythonn'[:-1]
>>> a is b
False
>>>
But strange enough, it is different for integers:
>>> a = 1
>>> b = 1
>>> a is b
True
>>> a = 3*8
>>> b = 4*6
>>> a is b
True
>>>
But as the link he gave, there you can see that:
>>> a = 257
>>> b = 257
>>> a is b
False
>>>
How to know if it is gonna be True
or not?
Well, here is when id
comes in handy:
Here you go, just type in id
and two parens and say your varaible...:
>>> a = 1
>>> b = 1
>>> id(a)
1935522256
>>> id(b)
1935522256
>>> a = 257 # or -6
>>> b = 257 # or -6
>>> id(a)
935705330960
>>> id(b)
935705331216
>>>
Why?
is
is kinda confusing:
@ajnLJA-0184 is correct, but additionally, strings work well too, but when you do some operations to it, but still the same strings, nope:
>>> a = 'python'
>>> b = 'python'
>>> a is b
True
>>> a = 'pytho' + 'n'
>>> b = 'pythonn'[:-1]
>>> a is b
False
>>>
But strange enough, it is different for integers:
>>> a = 1
>>> b = 1
>>> a is b
True
>>> a = 3*8
>>> b = 4*6
>>> a is b
True
>>>
But as the link he gave, there you can see that:
>>> a = 257
>>> b = 257
>>> a is b
False
>>>
How to know if it is gonna be True
or not?
Well, here is when id
comes in handy:
Here you go, just type in id
and two parens and say your varaible...:
>>> a = 1
>>> b = 1
>>> id(a)
1935522256
>>> id(b)
1935522256
>>> a = 257 # or -6
>>> b = 257 # or -6
>>> id(a)
935705330960
>>> id(b)
935705331216
>>>
edited 1 hour ago
answered 1 hour ago
U9-ForwardU9-Forward
18.6k51744
18.6k51744
1
Whyd is a
equals False in the first example? That's new.
– ajnLJA-0184
1 hour ago
@ajnLJA-0 Because the strings aren't direct like'python'
, they do an operation to get'python'
, that's why.
– U9-Forward
1 hour ago
add a comment |
1
Whyd is a
equals False in the first example? That's new.
– ajnLJA-0184
1 hour ago
@ajnLJA-0 Because the strings aren't direct like'python'
, they do an operation to get'python'
, that's why.
– U9-Forward
1 hour ago
1
1
Why
d is a
equals False in the first example? That's new.– ajnLJA-0184
1 hour ago
Why
d is a
equals False in the first example? That's new.– ajnLJA-0184
1 hour ago
@ajnLJA-0 Because the strings aren't direct like
'python'
, they do an operation to get 'python'
, that's why.– U9-Forward
1 hour ago
@ajnLJA-0 Because the strings aren't direct like
'python'
, they do an operation to get 'python'
, that's why.– U9-Forward
1 hour ago
add a comment |
Just A Lone is a new contributor. Be nice, and check out our Code of Conduct.
Just A Lone is a new contributor. Be nice, and check out our Code of Conduct.
Just A Lone is a new contributor. Be nice, and check out our Code of Conduct.
Just A Lone is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55756029%2fhow-does-python-know-the-values-already-stored-in-its-memory%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Use
print(hex(id(b)))
to check memory address forb
– Yusufsn
1 hour ago
>>> hex(id(b))'0x7ffe705ee350' >>> hex(id(a)) '0x7ffe705ee350'
– Just A Lone
1 hour ago
the values are the same
– Just A Lone
1 hour ago
1
If two variables refer to the same value between -5 and 256 (as opposed to use) then by definition there is only one object.
– Yusufsn
1 hour ago
1
@Yusufsn No. For bigger integers (>256) it's not true.
– ajnLJA-0184
1 hour ago