Hi, at some part of my project, copy_() operation struggled me a bit,
thus I tried to make a toy example as below but could not find a solution for it.
import torch

class A():
    def __init__(self):
        self.tensor = torch.zeros((5, 6), dtype=torch.float)

    def check(self, b):
        self.tensor[[2, 4]].copy_(b.tensor)
        print(self.tensor)

class B():
    def __init__(self, tensor):
        self.tensor = tensor

m = torch.ones((2, 6), dtype=torch.float)

a = A()
b = B(m)

a.check(b)

As written, this simple code is just to copy 1.0s to 0.0 at specific locations,
and what I get is only full of zeros, which means copy_() operation did not work.
tensor([[0., 0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0., 0.]])

below code which uses assigning operation = instead of copy_() works
def check(self, b):
    self.tensor[[2, 4]] = b.tensor
    print(self.tensor)

tensor([[0., 0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0., 0.],
        [1., 1., 1., 1., 1., 1.],
        [0., 0., 0., 0., 0., 0.],
        [1., 1., 1., 1., 1., 1.]])

and moreover, below code which is not involved in the use of classes works fine
c = torch.zeros((5, 6), dtype=torch.float)
d = torch.ones((2, 6), dtype=torch.float)

c[[2, 4]] = d
print(c)

tensor([[0., 0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0., 0.],
        [1., 1., 1., 1., 1., 1.],
        [0., 0., 0., 0., 0., 0.],
        [1., 1., 1., 1., 1., 1.]])

I am hoping to fully understand the reason of not copying the values at the first toy example
(I tried on PyTorch 1.6.0 and 1.7.0)