input: Write a function to implement a hash table in Python that supports insert, delete and retrieve operations. The hash table should use a list of lists (also known as a "bucket array") to handle hash collisions. The capacity of the hash table should be 256 buckets. The function should define a class named 'HashTable' with the following methods: 'insert' to add a key-value pair, 'retrieve' to get the value associated with a key, and 'delete' to remove a key-value pair. If the key to retrieve or delete does not exist, the respective method should return None.
  
  class HashTable:
      def __init__(self):
          self.table = [[] for _ in range(256)]
   
      def insert(self, key, value):
          h = hash(key) % 256
          for i, kv in enumerate(self.table[h]):
              if kv[0] == key:
                  self.table[h][i] = (key, value)
                  return
          self.table[h].append((key, value))
   
      def retrieve(self, key):
          h = hash(key) % 256
          for kv in self.table[h]:
              if kv[0] == key:
                  return kv[1]
          return None
   
      def delete(self, key):
          h = hash(key) % 256
          for i, kv in enumerate(self.table[h]):
              if kv[0] == key:
                  del self.table[h][i]
                  return
  
  assert HashTable().retrieve("key1")==None
  assert HashTable().insert("key1", "value1")==None
  assert HashTable().retrieve("key1")=="value1"
  assert HashTable().delete("key1")==None
  assert HashTable().retrieve("key1")==None
output: 
  class HashTable:
      def __init__(self):
          self.table = [[] for _ in range(256)]
   
      def insert(self, key, value):
          h = hash(key) % 256
          for i, kv in enumerate(self.table[h]):
              if kv[0] == key:
                  self.table[h][i] = (key, value)
                  return
          self.table[h].append((key, value))
   
      def retrieve(self, key):
          h = hash(key) % 256
          for kv in self.table[h]:
              if kv[0] == key:
                  return kv[1]
          return None
   
      def delete(self, key):
          h = hash(key) % 256
          for i, kv in enumerate(self.table[h]):
              if kv[0] == key:
                  del self.table[h][i]
                  return
  