diff --git a/src/PIL/Image.py b/src/PIL/Image.py
--- a/src/PIL/Image.py
+++ b/src/PIL/Image.py
@@ -1130,7 +1130,9 @@ def quantize(self, colors=256, method=None, kmeans=0, palette=None, dither=1):
                     "only RGB or L mode images can be quantized to a palette"
                 )
             im = self.im.convert("P", dither, palette.im)
-            return self._new(im)
+            new_im = self._new(im)
+            new_im.palette = palette.palette.copy()
+            return new_im
 
         im = self._new(self.im.quantize(colors, method, kmeans))
 

diff --git a/Tests/test_image_quantize.py b/Tests/test_image_quantize.py
--- a/Tests/test_image_quantize.py
+++ b/Tests/test_image_quantize.py
@@ -63,6 +63,7 @@ def test_quantize_no_dither():
 
     converted = image.quantize(dither=0, palette=palette)
     assert_image(converted, "P", converted.size)
+    assert converted.palette.palette == palette.palette.palette
 
 
 def test_quantize_dither_diff():

PNG palette quantized save functionality different between 8.1.0 and 8.3.1
### What did you do?
Create a palette, quantize an image using this palette and save it.

### What did you expect to happen?
The palette information is stored correctly. I.e. the list of RGB values is the same in the saved image.
E.g. [0, 0, 0, 209, 254, 76, 217, 3, 3, 10, 66, 192,...]

### What actually happened?
The list of RGB values is corrupted.
E.g. [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3,...]

### What are your OS, Python and Pillow versions?

* OS: Tested on Windows and Azure Databricks (Ubuntu)
* Python: 3.6 & 3.8
* Pillow: 8.3.1 has the issue

```python
from PIL import Image
from itertools import cycle
import numpy as np

palette = [0, 0, 0, 209, 254, 76, 217, 3, 3, 10, 66, 192]
# palette must contain 768 values (256 * 3)
# repeat the colours until we get there
color_iter = cycle(palette)
expanded_palette_format = []
while True:
    expanded_palette_format.append(next(color_iter))
    if len(expanded_palette_format) == 768:
        break

assert len(expanded_palette_format) == 768
palette_image = Image.new('P', (16, 16))
palette_image.putpalette(expanded_palette_format)

# a new image that we want to apply the palette to
im_to_palette = np.array(
    [
        [[0, 0, 0,],[209, 254, 76], [217, 3, 3], [10, 66, 192]],
        [[0, 0, 0,],[209, 254, 76], [217, 3, 3], [10, 66, 192]],
        [[0, 0, 0,],[209, 254, 76], [217, 3, 3], [10, 66, 192]],
        [[0, 0, 0,],[209, 254, 76], [217, 3, 3], [10, 66, 192]]
    ],
    np.uint8
    )
im = Image.fromarray(im_to_palette).quantize(palette=palette_image, dither=0)

im.save(r"test.png")
saved_im = Image.open(r"test.png")

assert im.getpalette() == saved_im.getpalette()
# AssertionError
```

Please note that if I specifically pass the 'GIF' argument on save, it has the expected behaviour.
```python
im.save(r"test.png", "GIF")
saved_im = Image.open(r"test.png")

assert im.getpalette() == saved_im.getpalette()
```
