“is” operation returns false even though two objects have same id [duplicate] The 2019...

How to handle characters who are more educated than the author?

How to politely respond to generic emails requesting a PhD/job in my lab? Without wasting too much time

What would this chord progression be called?

Single author papers against my advisor's will?

Do working physicists consider Newtonian mechanics to be "falsified"?

Is 'stolen' appropriate word?

First use of “packing” as in carrying a gun

Could an empire control the whole planet with today's comunication methods?

How can a C program poll for user input while simultaneously performing other actions in a Linux environment?

Working through the single responsibility principle (SRP) in Python when calls are expensive

Am I ethically obligated to go into work on an off day if the reason is sudden?

How to determine omitted units in a publication

University's motivation for having tenure-track positions

Did the new image of black hole confirm the general theory of relativity?

Would an alien lifeform be able to achieve space travel if lacking in vision?

Visa regaring travelling European country

Drawing arrows from one table cell reference to another

Can each chord in a progression create its own key?

Sort list of array linked objects by keys and values

how can a perfect fourth interval be considered either consonant or dissonant?

Why can't devices on different VLANs, but on the same subnet, communicate?

Sub-subscripts in strings cause different spacings than subscripts

Does Parliament need to approve the new Brexit delay to 31 October 2019?

Can I visit the Trinity College (Cambridge) library and see some of their rare books



“is” operation returns false even though two objects have same id [duplicate]



The 2019 Stack Overflow Developer Survey Results Are In
Announcing the arrival of Valued Associate #679: Cesar Manara
Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)
The Ask Question Wizard is Live!
Data science time! April 2019 and salary with experienceid() vs `is` operator. Is it safe to compare `id`s? Does the same `id` mean the same object?How to return multiple values from a function?Does Python have a ternary conditional operator?Relationship between SciPy and NumPyCreating a singleton in PythonPython: two objects are the sameWhy is [] faster than list()?Why does “not(True) in [False, True]” return False?is comparison returns False with strings using same idHow can two Python objects have same id but 'is' operator returns False?Comparing Objects - Why is == returning 'False' in the following example?





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







9
















This question already has an answer here:




  • id() vs `is` operator. Is it safe to compare `id`s? Does the same `id` mean the same object?

    1 answer




Two python objects have the same id but "is" operation returns false as shown below:



a = np.arange(12).reshape(2, -1)
c = a.reshape(12, 1)
print("id(c.data)", id(c.data))
print("id(a.data)", id(a.data))

print(c.data is a.data)
print(id(c.data) == id(a.data))


Here is the actual output:



id(c.data) 241233112
id(a.data) 241233112
False
True


My question is... why "c.data is a.data" returns false even though they point to the same ID, thus pointing to the same object? I thought that they point to the same object if they have same ID or am I wrong? Thank you!










share|improve this question















marked as duplicate by ivan_pozdeev, smci, Community 38 mins ago


This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.














  • 1





    @C.Nivs They don't even necessarily have different memory addresses (something which Python doesn't expose). Whatever memory was used for the first may have been reused for the second.

    – chepner
    11 hours ago






  • 3





    @C.Nivs Don't think of it in terms of memory addresses. How memory is managed is completely implementation dependent. All you know for sure is that two objects that overlap in time will not have the same id.

    – chepner
    11 hours ago






  • 1





    @Aran-Fey, that's okay a good question(though asked before) can sometimes be resurrected for a fruitful discussion

    – amanb
    11 hours ago






  • 4





    @C.Nivs no, ids do not belong to variables. They belong to objects. Many variables can reference the same object.

    – juanpa.arrivillaga
    10 hours ago






  • 2





    @juanpa.arrivillaga fair enough. Thanks for the explanation

    – C.Nivs
    9 hours ago


















9
















This question already has an answer here:




  • id() vs `is` operator. Is it safe to compare `id`s? Does the same `id` mean the same object?

    1 answer




Two python objects have the same id but "is" operation returns false as shown below:



a = np.arange(12).reshape(2, -1)
c = a.reshape(12, 1)
print("id(c.data)", id(c.data))
print("id(a.data)", id(a.data))

print(c.data is a.data)
print(id(c.data) == id(a.data))


Here is the actual output:



id(c.data) 241233112
id(a.data) 241233112
False
True


My question is... why "c.data is a.data" returns false even though they point to the same ID, thus pointing to the same object? I thought that they point to the same object if they have same ID or am I wrong? Thank you!










share|improve this question















marked as duplicate by ivan_pozdeev, smci, Community 38 mins ago


This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.














  • 1





    @C.Nivs They don't even necessarily have different memory addresses (something which Python doesn't expose). Whatever memory was used for the first may have been reused for the second.

    – chepner
    11 hours ago






  • 3





    @C.Nivs Don't think of it in terms of memory addresses. How memory is managed is completely implementation dependent. All you know for sure is that two objects that overlap in time will not have the same id.

    – chepner
    11 hours ago






  • 1





    @Aran-Fey, that's okay a good question(though asked before) can sometimes be resurrected for a fruitful discussion

    – amanb
    11 hours ago






  • 4





    @C.Nivs no, ids do not belong to variables. They belong to objects. Many variables can reference the same object.

    – juanpa.arrivillaga
    10 hours ago






  • 2





    @juanpa.arrivillaga fair enough. Thanks for the explanation

    – C.Nivs
    9 hours ago














9












9








9









This question already has an answer here:




  • id() vs `is` operator. Is it safe to compare `id`s? Does the same `id` mean the same object?

    1 answer




Two python objects have the same id but "is" operation returns false as shown below:



a = np.arange(12).reshape(2, -1)
c = a.reshape(12, 1)
print("id(c.data)", id(c.data))
print("id(a.data)", id(a.data))

print(c.data is a.data)
print(id(c.data) == id(a.data))


Here is the actual output:



id(c.data) 241233112
id(a.data) 241233112
False
True


My question is... why "c.data is a.data" returns false even though they point to the same ID, thus pointing to the same object? I thought that they point to the same object if they have same ID or am I wrong? Thank you!










share|improve this question

















This question already has an answer here:




  • id() vs `is` operator. Is it safe to compare `id`s? Does the same `id` mean the same object?

    1 answer




Two python objects have the same id but "is" operation returns false as shown below:



a = np.arange(12).reshape(2, -1)
c = a.reshape(12, 1)
print("id(c.data)", id(c.data))
print("id(a.data)", id(a.data))

print(c.data is a.data)
print(id(c.data) == id(a.data))


Here is the actual output:



id(c.data) 241233112
id(a.data) 241233112
False
True


My question is... why "c.data is a.data" returns false even though they point to the same ID, thus pointing to the same object? I thought that they point to the same object if they have same ID or am I wrong? Thank you!





This question already has an answer here:




  • id() vs `is` operator. Is it safe to compare `id`s? Does the same `id` mean the same object?

    1 answer








python numpy






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 3 hours ago









user2357112

158k13177269




158k13177269










asked 11 hours ago









drminixdrminix

564




564




marked as duplicate by ivan_pozdeev, smci, Community 38 mins ago


This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.









marked as duplicate by ivan_pozdeev, smci, Community 38 mins ago


This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.










  • 1





    @C.Nivs They don't even necessarily have different memory addresses (something which Python doesn't expose). Whatever memory was used for the first may have been reused for the second.

    – chepner
    11 hours ago






  • 3





    @C.Nivs Don't think of it in terms of memory addresses. How memory is managed is completely implementation dependent. All you know for sure is that two objects that overlap in time will not have the same id.

    – chepner
    11 hours ago






  • 1





    @Aran-Fey, that's okay a good question(though asked before) can sometimes be resurrected for a fruitful discussion

    – amanb
    11 hours ago






  • 4





    @C.Nivs no, ids do not belong to variables. They belong to objects. Many variables can reference the same object.

    – juanpa.arrivillaga
    10 hours ago






  • 2





    @juanpa.arrivillaga fair enough. Thanks for the explanation

    – C.Nivs
    9 hours ago














  • 1





    @C.Nivs They don't even necessarily have different memory addresses (something which Python doesn't expose). Whatever memory was used for the first may have been reused for the second.

    – chepner
    11 hours ago






  • 3





    @C.Nivs Don't think of it in terms of memory addresses. How memory is managed is completely implementation dependent. All you know for sure is that two objects that overlap in time will not have the same id.

    – chepner
    11 hours ago






  • 1





    @Aran-Fey, that's okay a good question(though asked before) can sometimes be resurrected for a fruitful discussion

    – amanb
    11 hours ago






  • 4





    @C.Nivs no, ids do not belong to variables. They belong to objects. Many variables can reference the same object.

    – juanpa.arrivillaga
    10 hours ago






  • 2





    @juanpa.arrivillaga fair enough. Thanks for the explanation

    – C.Nivs
    9 hours ago








1




1





@C.Nivs They don't even necessarily have different memory addresses (something which Python doesn't expose). Whatever memory was used for the first may have been reused for the second.

– chepner
11 hours ago





@C.Nivs They don't even necessarily have different memory addresses (something which Python doesn't expose). Whatever memory was used for the first may have been reused for the second.

– chepner
11 hours ago




3




3





@C.Nivs Don't think of it in terms of memory addresses. How memory is managed is completely implementation dependent. All you know for sure is that two objects that overlap in time will not have the same id.

– chepner
11 hours ago





@C.Nivs Don't think of it in terms of memory addresses. How memory is managed is completely implementation dependent. All you know for sure is that two objects that overlap in time will not have the same id.

– chepner
11 hours ago




1




1





@Aran-Fey, that's okay a good question(though asked before) can sometimes be resurrected for a fruitful discussion

– amanb
11 hours ago





@Aran-Fey, that's okay a good question(though asked before) can sometimes be resurrected for a fruitful discussion

– amanb
11 hours ago




4




4





@C.Nivs no, ids do not belong to variables. They belong to objects. Many variables can reference the same object.

– juanpa.arrivillaga
10 hours ago





@C.Nivs no, ids do not belong to variables. They belong to objects. Many variables can reference the same object.

– juanpa.arrivillaga
10 hours ago




2




2





@juanpa.arrivillaga fair enough. Thanks for the explanation

– C.Nivs
9 hours ago





@juanpa.arrivillaga fair enough. Thanks for the explanation

– C.Nivs
9 hours ago












2 Answers
2






active

oldest

votes


















14














a.data and c.data both produce a transient object, with no reference to it. As such, both are immediately garbage-collected. The same id can be used for both.



In your first if statement, the objects have to co-exist while is checks if they are identical, which they are not.



In the second if statement, each object is released as soon as id returns its id.



If you save references to both objects, keeping them alive, you can see they are not the same object.



r0 = a.data
r1 = c.data
assert r0 is not r1





share|improve this answer





















  • 4





    what is confusing is the fact that data looks like an attribute, but is probably a property

    – Jean-François Fabre
    11 hours ago











  • In my tests, the id's are different in the first run, but change to become the same on subsequent runs.

    – amanb
    11 hours ago











  • @Jean-FrançoisFabre so would that mean that the object itself is only returned when a getter is called, and the property is not actually stored in the class? I'm not quite familiar with the differences between a property vs attribute

    – C.Nivs
    11 hours ago






  • 5





    a property is a method disguised as an attribute. So it can return a discardable integer, object, whatever.

    – Jean-François Fabre
    11 hours ago











  • Thank you all! Coming from C/C++, I was just looking for a way to check if two different pointers point to the same object. So I should use "is operator" to compare if check if two pointers point to the same object. id() can return the same string since it can be re-used for transient objects. Thanks

    – drminix
    36 mins ago





















5














In [62]: a = np.arange(12).reshape(2,-1) 
...: c = a.reshape(12,1)


.data returns a memoryview object. id just gives the id of that object; it's not the value of the object, or any indication of where a databuffer is located.



In [63]: a.data                                                                 
Out[63]: <memory at 0x7f672d1101f8>
In [64]: c.data
Out[64]: <memory at 0x7f672d1103a8>
In [65]: type(a.data)
Out[65]: memoryview


https://docs.python.org/3/library/stdtypes.html#memoryview



If you want to verify that a and c share a data buffer, I find the __array_interface__ to be a better tool.



In [66]: a.__array_interface__['data']                                          
Out[66]: (50988640, False)
In [67]: c.__array_interface__['data']
Out[67]: (50988640, False)


It even shows the offset produced by slicing - here 24 bytes, 3*8



In [68]: c[3:].__array_interface__['data']                                      
Out[68]: (50988664, False)




I haven't seen much use of a.data. It can be used as the buffer object when creating a new array with ndarray:



In [70]: d = np.ndarray((2,6), dtype=a.dtype, buffer=a.data)                    
In [71]: d
Out[71]:
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11]])
In [72]: d.__array_interface__['data']
Out[72]: (50988640, False)


But normally we create new arrays with shared memory with slicing or np.array (copy=False).






share|improve this answer
































    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    14














    a.data and c.data both produce a transient object, with no reference to it. As such, both are immediately garbage-collected. The same id can be used for both.



    In your first if statement, the objects have to co-exist while is checks if they are identical, which they are not.



    In the second if statement, each object is released as soon as id returns its id.



    If you save references to both objects, keeping them alive, you can see they are not the same object.



    r0 = a.data
    r1 = c.data
    assert r0 is not r1





    share|improve this answer





















    • 4





      what is confusing is the fact that data looks like an attribute, but is probably a property

      – Jean-François Fabre
      11 hours ago











    • In my tests, the id's are different in the first run, but change to become the same on subsequent runs.

      – amanb
      11 hours ago











    • @Jean-FrançoisFabre so would that mean that the object itself is only returned when a getter is called, and the property is not actually stored in the class? I'm not quite familiar with the differences between a property vs attribute

      – C.Nivs
      11 hours ago






    • 5





      a property is a method disguised as an attribute. So it can return a discardable integer, object, whatever.

      – Jean-François Fabre
      11 hours ago











    • Thank you all! Coming from C/C++, I was just looking for a way to check if two different pointers point to the same object. So I should use "is operator" to compare if check if two pointers point to the same object. id() can return the same string since it can be re-used for transient objects. Thanks

      – drminix
      36 mins ago


















    14














    a.data and c.data both produce a transient object, with no reference to it. As such, both are immediately garbage-collected. The same id can be used for both.



    In your first if statement, the objects have to co-exist while is checks if they are identical, which they are not.



    In the second if statement, each object is released as soon as id returns its id.



    If you save references to both objects, keeping them alive, you can see they are not the same object.



    r0 = a.data
    r1 = c.data
    assert r0 is not r1





    share|improve this answer





















    • 4





      what is confusing is the fact that data looks like an attribute, but is probably a property

      – Jean-François Fabre
      11 hours ago











    • In my tests, the id's are different in the first run, but change to become the same on subsequent runs.

      – amanb
      11 hours ago











    • @Jean-FrançoisFabre so would that mean that the object itself is only returned when a getter is called, and the property is not actually stored in the class? I'm not quite familiar with the differences between a property vs attribute

      – C.Nivs
      11 hours ago






    • 5





      a property is a method disguised as an attribute. So it can return a discardable integer, object, whatever.

      – Jean-François Fabre
      11 hours ago











    • Thank you all! Coming from C/C++, I was just looking for a way to check if two different pointers point to the same object. So I should use "is operator" to compare if check if two pointers point to the same object. id() can return the same string since it can be re-used for transient objects. Thanks

      – drminix
      36 mins ago
















    14












    14








    14







    a.data and c.data both produce a transient object, with no reference to it. As such, both are immediately garbage-collected. The same id can be used for both.



    In your first if statement, the objects have to co-exist while is checks if they are identical, which they are not.



    In the second if statement, each object is released as soon as id returns its id.



    If you save references to both objects, keeping them alive, you can see they are not the same object.



    r0 = a.data
    r1 = c.data
    assert r0 is not r1





    share|improve this answer















    a.data and c.data both produce a transient object, with no reference to it. As such, both are immediately garbage-collected. The same id can be used for both.



    In your first if statement, the objects have to co-exist while is checks if they are identical, which they are not.



    In the second if statement, each object is released as soon as id returns its id.



    If you save references to both objects, keeping them alive, you can see they are not the same object.



    r0 = a.data
    r1 = c.data
    assert r0 is not r1






    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited 11 hours ago

























    answered 11 hours ago









    chepnerchepner

    262k35251345




    262k35251345








    • 4





      what is confusing is the fact that data looks like an attribute, but is probably a property

      – Jean-François Fabre
      11 hours ago











    • In my tests, the id's are different in the first run, but change to become the same on subsequent runs.

      – amanb
      11 hours ago











    • @Jean-FrançoisFabre so would that mean that the object itself is only returned when a getter is called, and the property is not actually stored in the class? I'm not quite familiar with the differences between a property vs attribute

      – C.Nivs
      11 hours ago






    • 5





      a property is a method disguised as an attribute. So it can return a discardable integer, object, whatever.

      – Jean-François Fabre
      11 hours ago











    • Thank you all! Coming from C/C++, I was just looking for a way to check if two different pointers point to the same object. So I should use "is operator" to compare if check if two pointers point to the same object. id() can return the same string since it can be re-used for transient objects. Thanks

      – drminix
      36 mins ago
















    • 4





      what is confusing is the fact that data looks like an attribute, but is probably a property

      – Jean-François Fabre
      11 hours ago











    • In my tests, the id's are different in the first run, but change to become the same on subsequent runs.

      – amanb
      11 hours ago











    • @Jean-FrançoisFabre so would that mean that the object itself is only returned when a getter is called, and the property is not actually stored in the class? I'm not quite familiar with the differences between a property vs attribute

      – C.Nivs
      11 hours ago






    • 5





      a property is a method disguised as an attribute. So it can return a discardable integer, object, whatever.

      – Jean-François Fabre
      11 hours ago











    • Thank you all! Coming from C/C++, I was just looking for a way to check if two different pointers point to the same object. So I should use "is operator" to compare if check if two pointers point to the same object. id() can return the same string since it can be re-used for transient objects. Thanks

      – drminix
      36 mins ago










    4




    4





    what is confusing is the fact that data looks like an attribute, but is probably a property

    – Jean-François Fabre
    11 hours ago





    what is confusing is the fact that data looks like an attribute, but is probably a property

    – Jean-François Fabre
    11 hours ago













    In my tests, the id's are different in the first run, but change to become the same on subsequent runs.

    – amanb
    11 hours ago





    In my tests, the id's are different in the first run, but change to become the same on subsequent runs.

    – amanb
    11 hours ago













    @Jean-FrançoisFabre so would that mean that the object itself is only returned when a getter is called, and the property is not actually stored in the class? I'm not quite familiar with the differences between a property vs attribute

    – C.Nivs
    11 hours ago





    @Jean-FrançoisFabre so would that mean that the object itself is only returned when a getter is called, and the property is not actually stored in the class? I'm not quite familiar with the differences between a property vs attribute

    – C.Nivs
    11 hours ago




    5




    5





    a property is a method disguised as an attribute. So it can return a discardable integer, object, whatever.

    – Jean-François Fabre
    11 hours ago





    a property is a method disguised as an attribute. So it can return a discardable integer, object, whatever.

    – Jean-François Fabre
    11 hours ago













    Thank you all! Coming from C/C++, I was just looking for a way to check if two different pointers point to the same object. So I should use "is operator" to compare if check if two pointers point to the same object. id() can return the same string since it can be re-used for transient objects. Thanks

    – drminix
    36 mins ago







    Thank you all! Coming from C/C++, I was just looking for a way to check if two different pointers point to the same object. So I should use "is operator" to compare if check if two pointers point to the same object. id() can return the same string since it can be re-used for transient objects. Thanks

    – drminix
    36 mins ago















    5














    In [62]: a = np.arange(12).reshape(2,-1) 
    ...: c = a.reshape(12,1)


    .data returns a memoryview object. id just gives the id of that object; it's not the value of the object, or any indication of where a databuffer is located.



    In [63]: a.data                                                                 
    Out[63]: <memory at 0x7f672d1101f8>
    In [64]: c.data
    Out[64]: <memory at 0x7f672d1103a8>
    In [65]: type(a.data)
    Out[65]: memoryview


    https://docs.python.org/3/library/stdtypes.html#memoryview



    If you want to verify that a and c share a data buffer, I find the __array_interface__ to be a better tool.



    In [66]: a.__array_interface__['data']                                          
    Out[66]: (50988640, False)
    In [67]: c.__array_interface__['data']
    Out[67]: (50988640, False)


    It even shows the offset produced by slicing - here 24 bytes, 3*8



    In [68]: c[3:].__array_interface__['data']                                      
    Out[68]: (50988664, False)




    I haven't seen much use of a.data. It can be used as the buffer object when creating a new array with ndarray:



    In [70]: d = np.ndarray((2,6), dtype=a.dtype, buffer=a.data)                    
    In [71]: d
    Out[71]:
    array([[ 0, 1, 2, 3, 4, 5],
    [ 6, 7, 8, 9, 10, 11]])
    In [72]: d.__array_interface__['data']
    Out[72]: (50988640, False)


    But normally we create new arrays with shared memory with slicing or np.array (copy=False).






    share|improve this answer






























      5














      In [62]: a = np.arange(12).reshape(2,-1) 
      ...: c = a.reshape(12,1)


      .data returns a memoryview object. id just gives the id of that object; it's not the value of the object, or any indication of where a databuffer is located.



      In [63]: a.data                                                                 
      Out[63]: <memory at 0x7f672d1101f8>
      In [64]: c.data
      Out[64]: <memory at 0x7f672d1103a8>
      In [65]: type(a.data)
      Out[65]: memoryview


      https://docs.python.org/3/library/stdtypes.html#memoryview



      If you want to verify that a and c share a data buffer, I find the __array_interface__ to be a better tool.



      In [66]: a.__array_interface__['data']                                          
      Out[66]: (50988640, False)
      In [67]: c.__array_interface__['data']
      Out[67]: (50988640, False)


      It even shows the offset produced by slicing - here 24 bytes, 3*8



      In [68]: c[3:].__array_interface__['data']                                      
      Out[68]: (50988664, False)




      I haven't seen much use of a.data. It can be used as the buffer object when creating a new array with ndarray:



      In [70]: d = np.ndarray((2,6), dtype=a.dtype, buffer=a.data)                    
      In [71]: d
      Out[71]:
      array([[ 0, 1, 2, 3, 4, 5],
      [ 6, 7, 8, 9, 10, 11]])
      In [72]: d.__array_interface__['data']
      Out[72]: (50988640, False)


      But normally we create new arrays with shared memory with slicing or np.array (copy=False).






      share|improve this answer




























        5












        5








        5







        In [62]: a = np.arange(12).reshape(2,-1) 
        ...: c = a.reshape(12,1)


        .data returns a memoryview object. id just gives the id of that object; it's not the value of the object, or any indication of where a databuffer is located.



        In [63]: a.data                                                                 
        Out[63]: <memory at 0x7f672d1101f8>
        In [64]: c.data
        Out[64]: <memory at 0x7f672d1103a8>
        In [65]: type(a.data)
        Out[65]: memoryview


        https://docs.python.org/3/library/stdtypes.html#memoryview



        If you want to verify that a and c share a data buffer, I find the __array_interface__ to be a better tool.



        In [66]: a.__array_interface__['data']                                          
        Out[66]: (50988640, False)
        In [67]: c.__array_interface__['data']
        Out[67]: (50988640, False)


        It even shows the offset produced by slicing - here 24 bytes, 3*8



        In [68]: c[3:].__array_interface__['data']                                      
        Out[68]: (50988664, False)




        I haven't seen much use of a.data. It can be used as the buffer object when creating a new array with ndarray:



        In [70]: d = np.ndarray((2,6), dtype=a.dtype, buffer=a.data)                    
        In [71]: d
        Out[71]:
        array([[ 0, 1, 2, 3, 4, 5],
        [ 6, 7, 8, 9, 10, 11]])
        In [72]: d.__array_interface__['data']
        Out[72]: (50988640, False)


        But normally we create new arrays with shared memory with slicing or np.array (copy=False).






        share|improve this answer















        In [62]: a = np.arange(12).reshape(2,-1) 
        ...: c = a.reshape(12,1)


        .data returns a memoryview object. id just gives the id of that object; it's not the value of the object, or any indication of where a databuffer is located.



        In [63]: a.data                                                                 
        Out[63]: <memory at 0x7f672d1101f8>
        In [64]: c.data
        Out[64]: <memory at 0x7f672d1103a8>
        In [65]: type(a.data)
        Out[65]: memoryview


        https://docs.python.org/3/library/stdtypes.html#memoryview



        If you want to verify that a and c share a data buffer, I find the __array_interface__ to be a better tool.



        In [66]: a.__array_interface__['data']                                          
        Out[66]: (50988640, False)
        In [67]: c.__array_interface__['data']
        Out[67]: (50988640, False)


        It even shows the offset produced by slicing - here 24 bytes, 3*8



        In [68]: c[3:].__array_interface__['data']                                      
        Out[68]: (50988664, False)




        I haven't seen much use of a.data. It can be used as the buffer object when creating a new array with ndarray:



        In [70]: d = np.ndarray((2,6), dtype=a.dtype, buffer=a.data)                    
        In [71]: d
        Out[71]:
        array([[ 0, 1, 2, 3, 4, 5],
        [ 6, 7, 8, 9, 10, 11]])
        In [72]: d.__array_interface__['data']
        Out[72]: (50988640, False)


        But normally we create new arrays with shared memory with slicing or np.array (copy=False).







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited 10 hours ago

























        answered 10 hours ago









        hpauljhpaulj

        118k787160




        118k787160















            Popular posts from this blog

            Taj Mahal Inhaltsverzeichnis Aufbau | Geschichte | 350-Jahr-Feier | Heutige Bedeutung | Siehe auch |...

            Baia Sprie Cuprins Etimologie | Istorie | Demografie | Politică și administrație | Arii naturale...

            Ciclooctatetraenă Vezi și | Bibliografie | Meniu de navigare637866text4148569-500570979m