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?

Why do we need to use the builder design pattern when we can do the same thing with setters?

If Windows 7 doesn't support WSL, then what does Linux subsystem option mean?

How were pictures turned from film to a big picture in a picture frame before digital scanning?

An adverb for when you're not exaggerating

Do I really need to have a message in a novel to appeal to readers?

How would a mousetrap for use in space work?

How to install press fit bottom bracket into new frame

Is it fair for a professor to grade us on the possession of past papers?

Trademark violation for app?

Sending unknown callers to voice mail automatically?

Project Euler #1 in C++

Is there any word for a place full of confusion?

SF book about people trapped in a series of worlds they imagine

ArcGIS Pro Python arcpy.CreatePersonalGDB_management

How to react to hostile behavior from a senior developer?

Chinese Seal on silk painting - what does it mean?

Why weren't discrete x86 CPUs ever used in game hardware?

Crossing US/Canada Border for less than 24 hours

How to write the following sign?

How come Sam didn't become Lord of Horn Hill?

Why does the remaining Rebel fleet at the end of Rogue One seem dramatically larger than the one in A New Hope?

Is grep documentation about ignoring case wrong, since it doesn't ignore case in filenames?

What is the topology associated with the algebras for the ultrafilter monad?

What is "gratricide"?



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;








7















I want to know how Python knows (if it knows) if 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









share|improve this question









New contributor




Just A Lone is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.




















  • Use print(hex(id(b))) to check memory address for b

    – Yusufsn
    17 mins ago












  • >>> hex(id(b))'0x7ffe705ee350' >>> hex(id(a)) '0x7ffe705ee350'

    – Just A Lone
    16 mins ago











  • the values are the same

    – Just A Lone
    15 mins 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
    14 mins ago







  • 1





    @Yusufsn No. For bigger integers (>256) it's not true.

    – ajnLJA-0184
    9 mins ago

















7















I want to know how Python knows (if it knows) if 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









share|improve this question









New contributor




Just A Lone is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.




















  • Use print(hex(id(b))) to check memory address for b

    – Yusufsn
    17 mins ago












  • >>> hex(id(b))'0x7ffe705ee350' >>> hex(id(a)) '0x7ffe705ee350'

    – Just A Lone
    16 mins ago











  • the values are the same

    – Just A Lone
    15 mins 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
    14 mins ago







  • 1





    @Yusufsn No. For bigger integers (>256) it's not true.

    – ajnLJA-0184
    9 mins ago













7












7








7


1






I want to know how Python knows (if it knows) if 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









share|improve this question









New contributor




Just A Lone is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












I want to know how Python knows (if it knows) if 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






share|improve this question









New contributor




Just A Lone is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question









New contributor




Just A Lone is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question








edited 5 mins ago









user11206537

149115




149115






New contributor




Just A Lone is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked 21 mins ago









Just A LoneJust A Lone

384




384




New contributor




Just A Lone is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





Just A Lone is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






Just A Lone is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












  • Use print(hex(id(b))) to check memory address for b

    – Yusufsn
    17 mins ago












  • >>> hex(id(b))'0x7ffe705ee350' >>> hex(id(a)) '0x7ffe705ee350'

    – Just A Lone
    16 mins ago











  • the values are the same

    – Just A Lone
    15 mins 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
    14 mins ago







  • 1





    @Yusufsn No. For bigger integers (>256) it's not true.

    – ajnLJA-0184
    9 mins ago

















  • Use print(hex(id(b))) to check memory address for b

    – Yusufsn
    17 mins ago












  • >>> hex(id(b))'0x7ffe705ee350' >>> hex(id(a)) '0x7ffe705ee350'

    – Just A Lone
    16 mins ago











  • the values are the same

    – Just A Lone
    15 mins 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
    14 mins ago







  • 1





    @Yusufsn No. For bigger integers (>256) it's not true.

    – ajnLJA-0184
    9 mins ago
















Use print(hex(id(b))) to check memory address for b

– Yusufsn
17 mins ago






Use print(hex(id(b))) to check memory address for b

– Yusufsn
17 mins ago














>>> hex(id(b))'0x7ffe705ee350' >>> hex(id(a)) '0x7ffe705ee350'

– Just A Lone
16 mins ago





>>> hex(id(b))'0x7ffe705ee350' >>> hex(id(a)) '0x7ffe705ee350'

– Just A Lone
16 mins ago













the values are the same

– Just A Lone
15 mins ago





the values are the same

– Just A Lone
15 mins 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
14 mins 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
14 mins ago





1




1





@Yusufsn No. For bigger integers (>256) it's not true.

– ajnLJA-0184
9 mins ago





@Yusufsn No. For bigger integers (>256) it's not true.

– ajnLJA-0184
9 mins ago












4 Answers
4






active

oldest

votes


















6














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.






share|improve this answer










New contributor




ajnLJA-0184 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.



























    2














    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.






    share|improve this answer






























      0














      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.






      share|improve this answer








      New contributor




      Monster AR44 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.




















      • 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
        15 mins ago


















      0














      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
      >>> c = 'pytho' + 'n'
      >>> d = 'pythonn'[:-1]
      >>> c is d
      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
      >>>




      share

























        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.









        draft saved

        draft discarded


















        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









        6














        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.






        share|improve this answer










        New contributor




        ajnLJA-0184 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
        Check out our Code of Conduct.
























          6














          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.






          share|improve this answer










          New contributor




          ajnLJA-0184 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
          Check out our Code of Conduct.






















            6












            6








            6







            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.






            share|improve this answer










            New contributor




            ajnLJA-0184 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
            Check out our Code of Conduct.










            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.







            share|improve this answer










            New contributor




            ajnLJA-0184 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
            Check out our Code of Conduct.









            share|improve this answer



            share|improve this answer








            edited 10 mins ago





















            New contributor




            ajnLJA-0184 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
            Check out our Code of Conduct.









            answered 16 mins ago









            ajnLJA-0184ajnLJA-0184

            1784




            1784




            New contributor




            ajnLJA-0184 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
            Check out our Code of Conduct.





            New contributor





            ajnLJA-0184 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
            Check out our Code of Conduct.






            ajnLJA-0184 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
            Check out our Code of Conduct.























                2














                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.






                share|improve this answer



























                  2














                  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.






                  share|improve this answer

























                    2












                    2








                    2







                    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.






                    share|improve this answer













                    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.







                    share|improve this answer












                    share|improve this answer



                    share|improve this answer










                    answered 10 mins ago









                    Mad PhysicistMad Physicist

                    39k1682113




                    39k1682113





















                        0














                        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.






                        share|improve this answer








                        New contributor




                        Monster AR44 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                        Check out our Code of Conduct.




















                        • 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
                          15 mins ago















                        0














                        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.






                        share|improve this answer








                        New contributor




                        Monster AR44 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                        Check out our Code of Conduct.




















                        • 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
                          15 mins ago













                        0












                        0








                        0







                        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.






                        share|improve this answer








                        New contributor




                        Monster AR44 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                        Check out our Code of Conduct.










                        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.







                        share|improve this answer








                        New contributor




                        Monster AR44 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                        Check out our Code of Conduct.









                        share|improve this answer



                        share|improve this answer






                        New contributor




                        Monster AR44 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                        Check out our Code of Conduct.









                        answered 17 mins ago









                        Monster AR44Monster AR44

                        111




                        111




                        New contributor




                        Monster AR44 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                        Check out our Code of Conduct.





                        New contributor





                        Monster AR44 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                        Check out our Code of Conduct.






                        Monster AR44 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
                        Check out our Code of Conduct.












                        • 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
                          15 mins 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
                          15 mins 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
                        15 mins 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
                        15 mins ago











                        0














                        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
                        >>> c = 'pytho' + 'n'
                        >>> d = 'pythonn'[:-1]
                        >>> c is d
                        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
                        >>>




                        share





























                          0














                          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
                          >>> c = 'pytho' + 'n'
                          >>> d = 'pythonn'[:-1]
                          >>> c is d
                          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
                          >>>




                          share



























                            0












                            0








                            0







                            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
                            >>> c = 'pytho' + 'n'
                            >>> d = 'pythonn'[:-1]
                            >>> c is d
                            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
                            >>>




                            share















                            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
                            >>> c = 'pytho' + 'n'
                            >>> d = 'pythonn'[:-1]
                            >>> c is d
                            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
                            >>>





                            share













                            share


                            share








                            edited 59 secs ago

























                            answered 6 mins ago









                            U9-ForwardU9-Forward

                            18.5k51744




                            18.5k51744




















                                Just A Lone is a new contributor. Be nice, and check out our Code of Conduct.









                                draft saved

                                draft discarded


















                                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.




                                draft saved


                                draft discarded














                                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





















































                                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







                                Popular posts from this blog

                                Are there any AGPL-style licences that require source code modifications to be public? Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern) Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?Force derivative works to be publicAre there any GPL like licenses for Apple App Store?Do you violate the GPL if you provide source code that cannot be compiled?GPL - is it distribution to use libraries in an appliance loaned to customers?Distributing App for free which uses GPL'ed codeModifications of server software under GPL, with web/CLI interfaceDoes using an AGPLv3-licensed library prevent me from dual-licensing my own source code?Can I publish only select code under GPLv3 from a private project?Is there published precedent regarding the scope of covered work that uses AGPL software?If MIT licensed code links to GPL licensed code what should be the license of the resulting binary program?If I use a public API endpoint that has its source code licensed under AGPL in my app, do I need to disclose my source?

                                2013 GY136 Descoberta | Órbita | Referências Menu de navegação«List Of Centaurs and Scattered-Disk Objects»«List of Known Trans-Neptunian Objects»

                                Metrô de Los Teques Índice Linhas | Estações | Ver também | Referências Ligações externas | Menu de navegação«INSTITUCIÓN»«Mapa de rutas»originalMetrô de Los TequesC.A. Metro Los Teques |Alcaldía de Guaicaipuro – Sitio OficialGobernacion de Mirandaeeeeeee