“is” operation returns false even though two objects have same id [duplicate] Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern) Data science time! April 2019 and salary with experience The Ask Question Wizard is Live!id() 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?

Random body shuffle every night—can we still function?

Why are current probes so expensive?

Shimano 105 brifters (5800) and Avid BB5 compatibility

calculator's angle answer for trig ratios that can work in more than 1 quadrant on the unit circle

IC on Digikey is 5x more expensive than board containing same IC on Alibaba: How?

Understanding piped commands in GNU/Linux

How to resize main filesystem

Why complex landing gears are used instead of simple, reliable and light weight muscle wire or shape memory alloys?

Problem with display of presentation

French equivalents of おしゃれは足元から (Every good outfit starts with the shoes)

Does a random sequence of vectors span a Hilbert space?

Getting representations of the Lie group out of representations of its Lie algebra

Does the universe have a fixed centre of mass?

How to name indistinguishable henchmen in a screenplay?

How could a hydrazine and N2O4 cloud (or it's reactants) show up in weather radar?

Was the pager message from Nick Fury to Captain Marvel unnecessary?

Meaning of 境 in その日を境に

How to make triangles with rounded sides and corners? (squircle with 3 sides)

Did any compiler fully use 80-bit floating point?

Is there a spell that can create a permanent fire?

How do you cope with tons of web fonts when copying and pasting from web pages?

Vertical ranges of Column Plots in 12

Why are two-digit numbers in Jonathan Swift's "Gulliver's Travels" (1726) written in "German style"?

My mentor says to set image to Fine instead of RAW — how is this different from JPG?



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



Announcing the arrival of Valued Associate #679: Cesar Manara
Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern)
Data science time! April 2019 and salary with experience
The Ask Question Wizard is Live!id() 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;








10
















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 Apr 13 at 6:09


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
    Apr 12 at 19:29






  • 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
    Apr 12 at 19:32






  • 1





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

    – amanb
    Apr 12 at 19:35






  • 4





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

    – juanpa.arrivillaga
    Apr 12 at 19:55






  • 2





    @juanpa.arrivillaga fair enough. Thanks for the explanation

    – C.Nivs
    Apr 12 at 21:19

















10
















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 Apr 13 at 6:09


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
    Apr 12 at 19:29






  • 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
    Apr 12 at 19:32






  • 1





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

    – amanb
    Apr 12 at 19:35






  • 4





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

    – juanpa.arrivillaga
    Apr 12 at 19:55






  • 2





    @juanpa.arrivillaga fair enough. Thanks for the explanation

    – C.Nivs
    Apr 12 at 21:19













10












10








10









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 Apr 13 at 3:43









user2357112

159k13177272




159k13177272










asked Apr 12 at 19:19









drminixdrminix

615




615




marked as duplicate by ivan_pozdeev, smci, Community Apr 13 at 6:09


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 Apr 13 at 6:09


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
    Apr 12 at 19:29






  • 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
    Apr 12 at 19:32






  • 1





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

    – amanb
    Apr 12 at 19:35






  • 4





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

    – juanpa.arrivillaga
    Apr 12 at 19:55






  • 2





    @juanpa.arrivillaga fair enough. Thanks for the explanation

    – C.Nivs
    Apr 12 at 21:19












  • 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
    Apr 12 at 19:29






  • 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
    Apr 12 at 19:32






  • 1





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

    – amanb
    Apr 12 at 19:35






  • 4





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

    – juanpa.arrivillaga
    Apr 12 at 19:55






  • 2





    @juanpa.arrivillaga fair enough. Thanks for the explanation

    – C.Nivs
    Apr 12 at 21:19







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
Apr 12 at 19:29





@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
Apr 12 at 19:29




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
Apr 12 at 19:32





@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
Apr 12 at 19:32




1




1





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

– amanb
Apr 12 at 19:35





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

– amanb
Apr 12 at 19:35




4




4





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

– juanpa.arrivillaga
Apr 12 at 19:55





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

– juanpa.arrivillaga
Apr 12 at 19:55




2




2





@juanpa.arrivillaga fair enough. Thanks for the explanation

– C.Nivs
Apr 12 at 21:19





@juanpa.arrivillaga fair enough. Thanks for the explanation

– C.Nivs
Apr 12 at 21:19












2 Answers
2






active

oldest

votes


















16














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




















  • 5





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

    – Jean-François Fabre
    Apr 12 at 19:27











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

    – amanb
    Apr 12 at 19:30











  • @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
    Apr 12 at 19:30






  • 6





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

    – Jean-François Fabre
    Apr 12 at 19:31











  • 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
    Apr 13 at 6:12



















6














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









    16














    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




















    • 5





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

      – Jean-François Fabre
      Apr 12 at 19:27











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

      – amanb
      Apr 12 at 19:30











    • @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
      Apr 12 at 19:30






    • 6





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

      – Jean-François Fabre
      Apr 12 at 19:31











    • 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
      Apr 13 at 6:12
















    16














    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




















    • 5





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

      – Jean-François Fabre
      Apr 12 at 19:27











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

      – amanb
      Apr 12 at 19:30











    • @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
      Apr 12 at 19:30






    • 6





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

      – Jean-François Fabre
      Apr 12 at 19:31











    • 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
      Apr 13 at 6:12














    16












    16








    16







    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 Apr 12 at 19:28

























    answered Apr 12 at 19:25









    chepnerchepner

    264k36254346




    264k36254346







    • 5





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

      – Jean-François Fabre
      Apr 12 at 19:27











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

      – amanb
      Apr 12 at 19:30











    • @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
      Apr 12 at 19:30






    • 6





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

      – Jean-François Fabre
      Apr 12 at 19:31











    • 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
      Apr 13 at 6:12













    • 5





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

      – Jean-François Fabre
      Apr 12 at 19:27











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

      – amanb
      Apr 12 at 19:30











    • @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
      Apr 12 at 19:30






    • 6





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

      – Jean-François Fabre
      Apr 12 at 19:31











    • 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
      Apr 13 at 6:12








    5




    5





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

    – Jean-François Fabre
    Apr 12 at 19:27





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

    – Jean-François Fabre
    Apr 12 at 19:27













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

    – amanb
    Apr 12 at 19:30





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

    – amanb
    Apr 12 at 19:30













    @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
    Apr 12 at 19:30





    @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
    Apr 12 at 19:30




    6




    6





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

    – Jean-François Fabre
    Apr 12 at 19:31





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

    – Jean-François Fabre
    Apr 12 at 19:31













    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
    Apr 13 at 6:12






    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
    Apr 13 at 6:12














    6














    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





























      6














      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



























        6












        6








        6







        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 Apr 12 at 19:54

























        answered Apr 12 at 19:48









        hpauljhpaulj

        118k788162




        118k788162













            Popular posts from this blog

            រឿង រ៉ូមេអូ និង ហ្ស៊ុយលីយេ សង្ខេបរឿង តួអង្គ បញ្ជីណែនាំ

            QGIS export composer to PDF scale the map [closed] 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?Print Composer QGIS 2.6, how to export image?QGIS 2.8.1 print composer won't export all OpenCycleMap base layer tilesSave Print/Map QGIS composer view as PNG/PDF using Python (without changing anything in visible layout)?Export QGIS Print Composer PDF with searchable text labelsQGIS Print Composer does not change from landscape to portrait orientation?How can I avoid map size and scale changes in print composer?Fuzzy PDF export in QGIS running on macSierra OSExport the legend into its 100% size using Print ComposerScale-dependent rendering in QGIS PDF output

            PDF-ში გადმოწერა სანავიგაციო მენიუproject page