`numpy()` making copies with model parameters
@mattbarrett98 I tried to replicate the issue and faced the output as follows;
Firstly when calling numpy();
```
1.753767936
2.954133504
```
Secondly when calling the numpy() on a model variable;
```
2.958012416
2.958012416
```
Please find the attached [gist](https://colab.research.google.com/gist/sushreebarsa/2c96698cf2c90df5e93fd33cf69bfb69/61524.ipynb) and confirm the results. Thank you! yea these are the correct results, though I think you said it the wrong way round- firstly it's calling `numpy()` on a model variable which is the one we see an increase in memory for. Second is `numpy()` on a 'normal' tensor, and there is no copies made in this case Hi Matt, I think this is working as expected. The copy comes from the call that converts the Tensor to a NP array. See this discussion from a few years ago: https://github.com/tensorflow/tensorflow/issues/33254 Are you satisfied with the resolution of your issue?
<a href="https://docs.google.com/forms/d/e/1FAIpQLSfaP12TRhd9xSxjXZjcZFNXPGk4kc1-qMdv3gc6bEP90vY1ew/viewform?entry.85265664=Yes&entry.2137816233=https://github.com/tensorflow/tensorflow/issues/61524">Yes</a>
<a href="https://docs.google.com/forms/d/e/1FAIpQLSfaP12TRhd9xSxjXZjcZFNXPGk4kc1-qMdv3gc6bEP90vY1ew/viewform?entry.85265664=No&entry.2137816233=https://github.com/tensorflow/tensorflow/issues/61524">No</a>

### Issue type

Performance

### Have you reproduced the bug with TensorFlow Nightly?

Yes

### Source

source

### TensorFlow version

2.12.0

### Custom code

Yes

### OS platform and distribution

_No response_

### Mobile device

_No response_

### Python version

_No response_

### Bazel version

_No response_

### GCC/compiler version

_No response_

### CUDA/cuDNN version

_No response_

### GPU model and memory

_No response_

### Current behavior?

When calling `numpy()` here no copies are made:
```python
import os, psutil
import tensorflow as tf

process = psutil.Process(os.getpid())
x = tf.random.normal((1, 300000))
print(process.memory_info().rss / 1e9). # 0.48
npy = x.numpy()
print(process.memory_info().rss / 1e9). # 0.48
```
However in the below example the increase in memory implies a copy is being made when calling `numpy()` on a model variable, is there any reason for this?

### Standalone code to reproduce the issue

```shell
import os, psutil
import tensorflow as tf

class TestKerasLinear(tf.keras.Model):
    def __init__(self, out_size):
        super(TestKerasLinear, self).__init__()
        self._linear = tf.keras.layers.Dense(out_size)

    def build(self, input_shape):
        super(TestKerasLinear, self).build(input_shape)

    def call(self, x):
        return self._linear(x)

tf_module = TestKerasLinear(1000)
tf_module.build((None, 300000))

process = psutil.Process(os.getpid())
print(process.memory_info().rss / 1e9). # 1.68

npy = tf_module.variables[0].numpy()

print(process.memory_info().rss / 1e9)  # 2.88
```


### Relevant log output

_No response_