input: Write a function to manage a contact list that supports adding, updating, deleting, and searching contacts.
  assert len(contact_list.contacts) == 1
  assert contact_list.contacts[0].name == "John Smith"
  contact_list.update_contact(1, Contact(1, "John Doe", "+1-202-555-0175"))
  assert contact_list.contacts[0].name == "John Doe"
  contact_list.delete_contact(1)
  assert len(contact_list.contacts) == 0
  contact_list.add_contact(Contact(2, "Jane Doe", "+1-202-555-0186"))
  result = contact_list.search_contact("Jane Doe")
  assert result[0].phone_number == "+1-202-555-0186"
output: class Contact:
      def __init__(self, contact_id, name, phone_number):
          self.contact_id = contact_id
          self.name = name
          self.phone_number = phone_number
  
  class ContactList:
      def __init__(self):
          self.contacts = []
  
      def add_contact(self, contact):
          self.contacts.append(contact)
  
      def update_contact(self, contact_id, new_contact):
          for idx, contact in enumerate(self.contacts):
              if contact.contact_id == contact_id:
                  self.contacts[idx] = new_contact
                  break
  
      def delete_contact(self, contact_id):
          self.contacts = [contact for contact in self.contacts if contact.contact_id != contact_id]
  
      def search_contact(self, name):
          return [contact for contact in self.contacts if contact.name == name]
  
  contact_list = ContactList()
  contact_list.add_contact(Contact(1, "John Smith", "+1-202-555-0175"))