### Godot version

4.1.stable

### System information

Godot v4.1.stable - elementary OS 7 Horus 7 (Ubuntu 22.04) - Vulkan (Mobile) - dedicated AMD Radeon RX 6600 (RADV NAVI23) () - Intel(R) Core(TM) i5-8500 CPU @ 3.00GHz (6 Threads)

### Issue description

Tilemap has a memory leak where if you repeatedly change the tile (that has collidable physics) of cells, the static memory (shown in the debugger) increases and stays there. This only happens if you have a physics layer in the Tileset and one of the tiles is collidable.

Also the memory usage is extremely high even when generating the map once. A 1000x1000 tiles map uses 1.4 GB of memory!

Workaround is simple. Simply clear the tilemap with `clear()` before you change the map.

### Steps to reproduce

1. Create a TileMap node
2. Create a TileSet containing two tiles on the atlas coordinates `(0, 0)` and `(1, 0)`
3. Create a Physics Layer in the TileSet and make one of the tiles fully collidable
4. Attach a script to the TileMap
5. Set the script to this
```
extends TileMap

func _process(delta):
	if Input.is_key_pressed(KEY_SPACE):
		for i in range(5000):
			set_cell(0, Vector2i(i, 0), 0, Vector2i(randi_range(0, 1), 0))
```
6. Run the scene
7. Go into "Debugger" tab in the editor while the scene is running
8. Press the "Monitors" tab press and observe the "Static" memory
9. Now hold down the space bar and observe the static memory climbing but never coming down
10. To workaround the problem simply add `clear()` before the loop like this:
```
extends TileMap

func _process(delta):
	if Input.is_key_pressed(KEY_SPACE):
		clear()
		for i in range(5000):
			set_cell(0, Vector2i(i, 0), 0, Vector2i(randi_range(0, 1), 0))
```

### Minimal reproduction project

[tilemapmemoryleak.zip](https://github.com/godotengine/godot/files/12064640/tilemapmemoryleak.zip)
VISIBILITY_MODE_DEFAULT,
		VISIBILITY_MODE_FORCE_SHOW,
		VISIBILITY_MODE_FORCE_HIDE,
	};
private:
	friend class TileSetPlugin;
	
	enum DataFormat {
		FORMAT_1 = 0,
		FORMAT_2,
		FORMAT_3
	};
	mutable DataFormat format = FORMAT_3;
	static constexpr float FP_ADJUST = 0.00001;
	
	Ref<TileSet> tile_set;
	int quadrant_size = 16;
	bool collision_animatable = false;
	VisibilityMode collision_visibility_mode = VISIBILITY_MODE_DEFAULT;
	VisibilityMode navigation_visibility_mode = VISIBILITY_MODE_DEFAULT;
	
	bool pending_update = false;
	
	Rect2 rect_cache;
	bool rect_cache_dirty = true;
	Rect2i used_rect_cache;
	bool used_rect_cache_dirty = true;