code: def test_send_recv_different_interpreters(self):
      r1, s1 = channels.create()
      r2, s2 = channels.create()
      orig1 = b"spam"
      s1.send_nowait(orig1)
      out = _run_output(
          interpreters.create(),
          dedent(
              f"""
                  obj1 = r.recv()
                  assert obj1 == b'spam', 'expected: obj1 == orig1'
                  # When going to another interpreter we get a copy.
                  assert id(obj1) != {id(orig1)}, 'expected: obj1 is not orig1'
                  orig2 = b'eggs'
                  print(id(orig2))
                  s.send_nowait(orig2)
                  """
          ),
          channels=dict(r=r1, s=s2),
      )
      obj2 = r2.recv()
  
      self.assertEqual(obj2, b"eggs")
      self.assertNotEqual(id(obj2), int(out))
  
imports: import threading
  from textwrap import dedent
  import unittest
  import time
  from test.support import import_helper
  from test.support import interpreters
  from test.support.interpreters import channels
  from .utils import _run_output, TestBase
label_desc: Use image node_id 3 for calling the TestSendRecv obj's underlying member method code with example usage: obj.test_send_recv_different_interpreters() without return types