code: def test_Model_clone() -> None:
      class Foo(Model, Local):
          p0 = Int()
          p1 = Alias("p0")
          p2 = List(Int)
          p3 = Nullable(Instance(lambda: Foo), default=None)
  
      f1 = Foo(p0=10, p2=[1, 2, 3], p3=Foo(p0=20, p2=[4, 5, 6]))
      c1 = f1.properties_with_values(include_defaults=False)
  
      f2 = f1.clone()
      c2 = f2.properties_with_values(include_defaults=False)
  
      assert f1.id != f2.id
      assert c1 == c2
      assert f1.p3.id == f2.p3.id
  
      f2.p2.append(4)
      assert f1.p2 == [1, 2, 3, 4]
  
      f2.p3.p0 = 30
      assert f1.p3.p0 == 30
  
imports: from __future__ import annotations
  import pytest
  import numpy
  from bokeh.core.has_props import HasProps, Local
  from bokeh.core.properties import Alias, Dict, Enum, Float, Instance, Int, List, NotSerialized, Nullable, NumberSpec, Override, Readonly, String, UnsetValueError
  from bokeh.model import Model
  from tests.support.util.api import verify_all
  import bokeh.core.properties
label_desc: Use image node_id 3 for calling a global function with example usage: test_Model_clone() without return types